0

我正在使用此代码

        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(Text))。感谢大家!

4

5 回答 5

1
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;

        }
}
于 2012-10-01T23:05:34.160 回答
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);
            }
于 2012-07-22T07:23:48.210 回答
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)

    }
于 2012-07-22T07:06:55.847 回答
0

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

于 2012-07-22T02:10:59.867 回答
0

根据文件结构,使用StreamReader公开ReadLine方法的 a 可能更容易。

using(var sr = new StreamReader(File.Open(textBox2.Text, FileMode.Open))
{
    while (sr.Peek() >= 0) 
    {
        Console.WriteLine(sr.ReadLine());
     }
}
于 2012-07-22T02:13:38.710 回答