Я пытаюсь прочитать большой файл с диска и сообщить процент, пока он загружается. Проблема заключается в том, что FileInfo.Length сообщает о разном размере, чем моя Encoding.ASCII.GetBytes().чтение большого файла, неправильный размер файла
public void loadList()
{
string ListPath = InnerConfig.dataDirectory + core.operation[operationID].Operation.Trim() + "/List.txt";
FileInfo f = new FileInfo(ListPath);
int bytesLoaded = 0;
using (FileStream fs = File.Open(ListPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
string line;
while ((line = sr.ReadLine()) != null)
{
byte[] array = Encoding.ASCII.GetBytes(line);
bytesLoaded += array.Length;
}
}
MessageBox.Show(bytesLoaded + "/" + f.Length);
}
В результате
13357/15251
Там в 1900 байт 'отсутствует'. Файл содержит список коротких строк. Любые советы, почему он сообщает о разных размерах файлов? он должен что-либо делать с символами '\ r' и '\ n' в файле? Кроме того, у меня есть следующая строка:
int bytesLoaded = 0;
Если файл позволяет сказать, что 1 ГБ большой, нужно ли вместо этого использовать «длинный»? Спасибо за ваше время!
Использование 'int' или' long' здесь не будет иметь значения, см. [Int32.MaxValue] (http://msdn.microsoft.com/en-us/library/system.int32.maxvalue.aspx) , – Stefan
Добро пожаловать в мир кодировок символов - на разных языках используются разные кодировки, поэтому не все ASCII. –
@Aron, использующий 'ReadToEnd' с ** большим файлом **, не будет хорошей идеей. У вас могут быть проблемы с ограниченной памятью или фрагментация LOH. – polkduran