FileStream.Read(): получу ли я когда-нибудь кусок, а не байт?

Я делаю ряд побитовых операций с массивом байтов в С#. Я получаю массив, вызывая FileStream.Read. Я только что понял, что не уверен, что произойдет, если где-то в файле будет плохой байт или поврежденный байт. Например, может быть обрублен конец или что-то в этом роде. Что FileStream сделает с этим? Будет ли испорченный байт «округлен» методом чтения? Будет ли выброшено исключение? Или это то, чего практически никогда не будет?

Спасибо, Брайан


person Brian Sweeney    schedule 18.06.2010    source источник


Ответы (1)


Если ваш вызов FileStream.Read завершится успешно, то в файле не будет неверных или поврежденных байтов. Каждый успешно прочитанный байт и часть файла имеют значение от 0 до 255. Важно то, как он интерпретируется программой.

Если FileStream.Read возвращает, например, 5 байтов, то вы можете быть уверены, что эти 5 байтов успешно прочитаны из файла, и все биты байтов были успешно помещены в ваш буфер.

Однако существует такая вещь, как, например, плохой кластер на вашем жестком диске, и в этом случае ваше чтение завершится ошибкой с каким-то исключением.

Для полноты я должен также упомянуть, что каждый тип файла имеет формат файла. т.е. как вы должны интерпретировать двоичные данные. Возможно, байт или несколько байтов не соответствуют формату файла. И таким образом вы можете рассматривать байт как поврежденный или недействительный, но на самом деле он не поврежден или недействителен, а просто неверен с точки зрения того, что указывает формат файла.

person Brian R. Bondy    schedule 18.06.2010
comment
Я думаю, что это ответ, который мне нужно было увидеть. Спасибо за разъяснения. - person Brian Sweeney; 18.06.2010