如何在块中使用File.ReadAllBytes

我正在使用此代码

string location1 = textBox2.Text; byte[] bytes = File.ReadAllBytes(location1); string text = (Convert.ToBase64String(bytes)); richTextBox1.Text = text; 

但是当我使用一个太大的文件时,我会遇到内存exception。

我想在块中使用File.ReadAllBytes 。 我见过这样的代码

 System.IO.FileStream fs = new System.IO.FileStream(textBox2.Text, System.IO.FileMode.Open); byte[] buf = new byte[BUF_SIZE]; int bytesRead; // Read the file one kilobyte at a time. do { bytesRead = fs.Read(buf, 0, BUF_SIZE); // 'buf' contains the last 1024 bytes read of the file. } while (bytesRead == BUF_SIZE); fs.Close(); } 

但我不知道如何将bytesRead实际转换为字节数组,我将转换为文本。

编辑:找到答案。 这是代码!

  private void button1_Click(object sender, EventArgs e) { const int MAX_BUFFER = 2048; byte[] Buffer = new byte[MAX_BUFFER]; int BytesRead; using (System.IO.FileStream fileStream = new FileStream(textBox2.Text, FileMode.Open, FileAccess.Read)) while ((BytesRead = fileStream.Read(Buffer, 0, MAX_BUFFER)) != 0) { string text = (Convert.ToBase64String(Buffer)); textBox1.Text = text; } } 

要更改文本格式的可读字节,请创建一个新字节并使其相等(Convert.FromBase64String(Text))。 感谢大家!

bytesRead只是读取的字节数。

这是一些块阅读

  var path = @"C:\Temp\file.blob"; using (Stream f = new FileStream(path, FileMode.Open)) { int offset = 0; long len = f.Length; byte[] buffer = new byte[len]; int readLen = 100; // using chunks of 100 for default while (offset != len) { if (offset + readLen > len) { readLen = (int) len - offset; } offset += f.Read(buffer, offset, readLen); } } 

现在你有buffer的字节,可以根据需要转换它们。

例如在“使用流”中:

  string result = string.Empty; foreach (byte b in buffer) { result += Convert.ToChar(b); } 

不, Read()的返回值是Read()字节数。 数据位于您传递给Read()的字节数组buf中。 你应该尝试理解代码,而不仅仅是复制和粘贴,然后问为什么它不起作用。 即使你这样做,评论说它就在那里!

根据文件结构的不同,您可能更容易使用暴露ReadLine方法的StreamReader

 using(var sr = new StreamReader(File.Open(textBox2.Text, FileMode.Open)) { while (sr.Peek() >= 0) { Console.WriteLine(sr.ReadLine()); } } 

如果文件是文本文件,则可以使用TextReader:

  string location1 = textBox2.Text; string text = String.Empty; using (TextReader reader = File.OpenText(location1 )) { do { string line = reader.ReadLine(); text+=line; } while(line!=null) } 
 private void button1_Click(object sender, EventArgs e) { const int MAX_BUFFER = 2048; byte[] Buffer = new byte[MAX_BUFFER]; int BytesRead; using (System.IO.FileStream fileStream = new FileStream(textBox2.Text, FileMode.Open, FileAccess.Read)) while ((BytesRead = fileStream.Read(Buffer, 0, MAX_BUFFER)) != 0) { string text = (Convert.ToBase64String(Buffer)); textBox1.Text = text; } }