#c# #streamreader #bin #binaryreader
#c# #streamreader #bin #двоичный файл
Вопрос:
Я должен полностью прочитать файл «.bin» и передать поток функции. Я попробовал это с помощью BinaryReader, который отлично работал для чтения значений байт за байтом, я хочу передать весь файл в виде потока строк в мою функцию. Использование StreamReader дает информацию о мусоре, похоже, StreamReader не может правильно прочитать файл bin.
Заранее спасибо.
Комментарии:
1. Пожалуйста, уточните, что именно вы хотите сделать. Вы хотите передать объект stream в свою функцию или содержимое файла? Если последнее, вы хотите передать содержимое файла в виде массива байтов или в виде строки с каждым байтом, представленным в виде шестнадцатеричных значений?
2. Ваш файл, вероятно, не является текстом в Юникоде. Вам нужно понимать файл, который вы читаете.
3. Мне нужно передать поток не двоичный, а строку, Где я могу читать строки и т. Д.
4. StreamReader не может прочитать файл bin, потому что он не в юникоде?
5. StreamReader не может прочитать его, потому что это не текст. Если вы знаете, что это текст в нестандартной кодировке, передайте эту кодировку
StreamReader
конструктору, и она будет работать.
Ответ №1:
Не передавайте двоичные данные как string
. Вместо этого используйте byte[]
which отдельно от любого Stream
, из которого вы могли его прочитать. Это правильно, что StreamReader
для чтения текста, поэтому вам нужно использовать BinaryReader
или просто Stream.Read()
метод напрямую. Если поток, из которого вы читаете, допускает поиск (доступный через CanSeek
свойство), вы можете обнаружить его Length
и прочитать все байты из потока за один раз.
Однако, если поток очень большой или не поддерживает поиск, вам нужно быть немного более сложным при чтении, выполняя его частями, пока Read()
метод не вернется 0
(что означает, что достигнут конец потока).
StreamReader.ReadToEnd()
Для чтения двоичных данных нет эквивалента, но определить его как метод расширения не очень сложно.