您好我读过这个问题:
Reading very large text files, should I be incorporating async?
我特别是STACK OVERFLOW的网络!
结果是14方法,但没有一个没有完成!
在最后两天,我正在研究这个问题,测试并测试了14种方法。
例如:
private void method()
{
FileStream FS = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
int FSBytes = (int) FS.Length;
int ChunkSize = 24;
byte[] B = new byte[ChunkSize];
int Pos;
for (Pos = 0; Pos < (FSBytes - ChunkSize); Pos += ChunkSize)
{
FS.Read(B,0 , ChunkSize);
string content = System.Text.Encoding.Default.GetString(B);
richTextBox1.Text=content=;
}
B = new byte[FSBytes - Pos];
FS.Read(B,0, FSBytes - Pos);
string content2 = System.Text.Encoding.Default.GetString(B);
richTextBox1Text=content2;
FS.Close();
FS.Dispose();
}
对于5mb文本文件,需要的时间太长,我该怎么办?
答案 0 :(得分:1)
这是每个流读取文本文件以完成您要执行的操作的工作示例。我用100 MB的文本文件测试了它,它运行良好,但你必须看看更大的文件是否也能正常工作。
这是一个例子。只需将RichTextBox带到表单和VScrollBar即可。然后在硬盘'C:'上使用'test.txt'文件。
public partial class Form1 : Form
{
const int PAGE_SIZE = 64; // in characters
int position = 0; // position in stream
public Form1()
{
InitializeComponent();
}
private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
position = e.NewValue * PAGE_SIZE;
ReadFile(position);
}
private void ReadFile(int position)
{
using (StreamReader sr = new StreamReader(@"C:\test.txt"))
{
char[] chars = new char[PAGE_SIZE];
sr.BaseStream.Seek(position, SeekOrigin.Begin);
sr.Read(chars, 0, PAGE_SIZE);
string text = new string(chars);
richTextBox1.Text = text;
}
}
private void Form1_Load(object sender, EventArgs e)
{
ReadFile(position);
}
}