通过滚动条逐块读取文本文件

本文关键字:读取 取文本 文件 滚动条 | 更新日期: 2023-09-27 18:26:51

嗨,我读过这个问题:

阅读非常大的文本文件,我应该合并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的文本文件,它太长了,我该怎么办?

通过滚动条逐块读取文本文件

这是一个按流读取文本文件以完成您想要做的事情的工作示例。我用一个100MB的文本文件对它进行了测试,它运行得很好,但您必须看看更大的文件是否也能运行。

这就是一个例子。只需在表单中添加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);
    }
}