Файловый поток читает только первые 4 символа файла - PullRequest
0 голосов
/ 03 мая 2011

Привет! Я пытаюсь прочитать файл 150 Мб с потоком файлов, но каждый раз, когда я делаю это, все, что я получаю, это: |zl вместо всего потока. Обратите внимание, что в нем есть специальные символы.

Кто-нибудь знает, в чем может быть проблема? вот мой код:

using (FileStream fs = File.OpenRead(path))
{
    byte[] buffer = new byte[fs.Length];
    fs.Read(buffer, 0, buffer.Length);
    extract = Encoding.Default.GetString(buffer);
}

Edit:
Я пытался прочитать весь текст, но он все еще возвращал те же четыре символа. Он отлично работает на любом другом файле, кроме этих немногих. Когда я использую чтение всех строк, он получает только первую строку.

Ответы [ 2 ]

8 голосов
/ 03 мая 2011

fs.Read() не читает весь бит байтов за раз, он читает некоторое количество байтов и возвращает количество прочитанных байтов. MSDN имеет отличный пример того, как использовать его для получения всего файла:

http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx

Для того, чтобы это стоило, чтение всех 150 МБ данных в памяти действительно приведет к утечке в системе вашего клиента - предпочтительным вариантом будет оптимизировать его, чтобы вам не понадобился весь файл сразу .

2 голосов
/ 03 мая 2011

Если вы хотите читать текст таким образом, File.ReadAllLine (или ReadAllText) - http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx - лучший вариант.

Полагаю, файл не является текстовым файлом, с которого нужно начинать, и способ отображения результирующей строки останавливается на 0 символов.

Как указал debracey, Read возвращает количество прочитанных байтов - проверьте это. Также для файловых операций вряд ли стоит останавливаться на 4 символах ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...