Пример кода для разбиения байтового массива на куски, преобразования и добавления его в строку - PullRequest
0 голосов
/ 16 июля 2010

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

string str1 = Convert.ToBase64String(fileBytes);

Он отлично работает с небольшими файлами, но когда файлы становятся слишком большими, например 170 МБ,приложение выдает исключение system.outofmemory.

Поэтому, чтобы избежать проблемы, я пытаюсь разбить массив байтов на куски, преобразовать и добавить его в строку.Мне нужно убедиться, что я читаю все фрагменты, пока не добавлю каждый фрагмент в конце строки.Нужен пример кода для разбиения на фрагменты и циклического прохождения ..

Ответы [ 2 ]

0 голосов
/ 17 июля 2010
  • Использование фиксированного размера CharrArray для сохранения результата - вычисление его из FileLen
  • Использование коэффициента размера Bf 6 - 6 байт -> 8 Chr

char[] ChArr;
string Fname = @"File Location ...";
byte[] bf = new byte[0x60000]; // 128k * 3  - 6 Bytes -> 8 Asc64 chr
int pout = 0;
int pin = 0;
using (FileStream Fs = new FileStream(Fname, FileMode.Open, FileAccess.Read))
{
    int TotalBytes = (int)Fs.Length;
    ChArr = new char[(int)(Math.Ceiling (TotalBytes / 3 )) * 4];
    while (pin < TotalBytes)
    {
        int bytesRead = Fs.Read(bf, 0, bf.Length);
        if (bytesRead <= 0) throw new Exception("Bof Found");

        int bw = Convert.ToBase64CharArray(bf, 0, bytesRead, ChArr, pout);
        pin += bytesRead;
        pout += bw;
    }
}
string s = new string(ChArr, 0, pout);
0 голосов
/ 16 июля 2010

Вы можете попробовать работать построчно:

using (var sr = new System.IO.StreamReader(filePath))
{
    var line = sr.ReadLine();
}
...