我正在使用此代码
string location1 = textBox2.Text;
byte[] bytes = File.ReadAllBytes(location1);
string text = (Convert.ToBase64String(bytes));
richTextBox1.Text = text;
但是当我使用太大的文件时,我的内存异常就会出现。
我想在块中使用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(文本))。谢谢大家!
答案 0 :(得分:1)
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);
}
答案 1 :(得分:0)
不,Read()
的返回值是读取的字节数。数据位于要传递给buf
的字节数组Read()
中。你应该尝试理解代码,而不仅仅是复制&粘贴,然后问为什么它不起作用。即使你这样做,评论就说就在那里!
答案 2 :(得分:0)
根据文件结构的不同,您可能更容易使用公开ReadLine
方法的StreamReader
。
using(var sr = new StreamReader(File.Open(textBox2.Text, FileMode.Open))
{
while (sr.Peek() >= 0)
{
Console.WriteLine(sr.ReadLine());
}
}
答案 3 :(得分:0)
如果文件是文本文件,您可以使用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)
}
答案 4 :(得分:0)
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;
}
}