2010-07-16 42 views
0

我正在将文件加载到字节数组中,然后使用以下 方法将其转换为字符串。将字节数组分割为块并将其转换并附加到字符串的示例代码

string str1 = Convert.ToBase64String(fileBytes); 

它正常工作与小文件,但是当文件FET过大像170MB,应用程序将引发“system.outofmemory”例外。

因此,为了避免这个问题,我试图将字节数组分割成块并将其转换并附加到字符串中。我需要确保我读取所有的块,直到在字符串的末尾附加每个块。需要打破成块和循环通过样品代码..

+0

它会像'while'循环,与文件读取操作和编码步骤(和IIRC您需要选择正确的块大小,或Base64编码将无效)配对。问题到底在哪里,到目前为止你有什么? – stakx 2010-07-16 18:28:07

回答

0

你可以尝试通过线基础上线工作:

using (var sr = new System.IO.StreamReader(filePath)) 
{ 
    var line = sr.ReadLine(); 
} 
0
  • 使用CharrArray固定大小来存储结果 - 从FileLen
  • 计算它
  • 使用了Bf尺寸因子6 - 6字节 - > 8人权委员会

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

字节数组:{0} - > AA ==,{0,0} - > AAA =,{0,0,0} - > AAAA – x77 2010-07-17 09:14:09

+0

非常感谢您的回应,代码正常工作,但必须将TotalBytes转换为十进制 – Anu 2010-07-21 13:39:21

+0

是,或者除以3.0来双倍划分。 – x77 2010-07-21 14:29:13

相关问题