Ema112 Ответов: 1

Как разрешить исключение из памяти при чтении с помощью двоичного считывателя, а затем преобразовать его в строку?


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

Я увеличил размер до более высокого значения, но при преобразовании в строку возникает проблема.

Что я уже пробовал:

FileStream fileStream = new FileStream(strFilePath + strFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
              int num = 0;
              BinaryReader binaryReader = new BinaryReader(fileStream, Encoding.GetEncoding(37));
              byte[] array = new byte[4];
              //byte[] array = new byte[1024];
              int num2 = 0;
              array = binaryReader.ReadBytes(4);
              //long length = fileStream.Length;

              num += 4;
              Array.Reverse(array);
              int i = BitConverter.ToInt32(array, 0);
              int num4 = 0;
              bool flag = false;
              bool flag2 = false;
              bool flag3 = false;
              bool flag4 = false;
              bool flag5 = false;
              bool flag6 = false;
              bool flag7 = false;
              bool flag8 = false;
              bool flag9 = false;
              bool flag10 = false;


              long num5 = 0L;



              string line;

              // Read the file and display it line by line.



              while (i > 0)
              {
                  byte[] array2 = new byte[i + 1];
                  //byte[] array2 = new byte[fileStream.Length];
                  array2 = binaryReader.ReadBytes(i);
                  num5 += (long)(i + 4);
                  num += i;
                  string @string = Encoding.ASCII.GetString(array2);
                  string key;

1 Ответов

Рейтинг:
1

OriginalGriff

Ваш пример кода неполон, поэтому трудно точно сказать, в чем может быть проблема - вы не показываете, где именно i изменяется, например.
Но... Этот комментарий наводит на мысль о проблеме:

// Read the file and display it line by line.

Если вы добавляете каждую строку в элемент управления, то, скорее всего, проблема заключается в замене элемента управления и в том, что вы пытаетесь показать слишком много данных одновременно. Если вы добавляете его в ListBox или DataGridView, например, то у вас закончатся дескрипторы задолго до того, как закончится память, и это вызовет то же самое сообщение об ошибке.

В любом случае бессмысленно просто "бросать" столько данных в вашего пользователя, поэтому просматривайте его, фильтруйте, ищите - но просто ожидание, что пользователь будет работать с тысячами строк, просто будет раздражать их!

Удалите код thgthgat, который на самом деле отображает строки, и я почти уверен, что сообщение об ошибке тоже исчезнет...