Считать фактические байты были прочитаны - PullRequest
0 голосов
/ 15 января 2019

Я анализирую большой файл, мне нравится следить за процессом, показывая, сколько байтов было прочитано. Фактический код массивный, но я считаю, что именно эти части.

StreamReader sr =  new StreamReader(FilePath);
        while ((line = sr.ReadLine()) != null )
        {
            //do parsing jobs

            byteCnt += Convert.ToUInt64( line.Length * sizeof(char) );
        }

 Console.WriteLine(String.Format("{0:n0}", byteCnt) + "  Bytes");

Файл имеет размер 16,9 ГБ (18 186 477 492 байта)

но моя программа насчитывает 34 816 805 164 байт

Как это могло случиться? и как сделать этот номер более разумным?

Спасибо

1 Ответ

0 голосов
/ 15 января 2019

sizeof(char) равно 2 в C #, так как использует кодировку Unicode. Если ваш файл не в Unicode, это не будет точной мерой. Вместо этого вы можете использовать, например,

System.Text.ASCIIEncoding.ASCII.GetByteCount(line);
// or another example:
Encoding.UTF8.GetByteCount(line);

Чтобы получить размер. Вам нужно выбрать подходящее решение в зависимости от кодировки вашего файла.

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