读取大文本文件并以块的形式使用它

时间:2012-10-23 19:49:29

标签: c# file-io

我是C#的新手,但是我已经做了一些读取/写入大文本文件的研究,最大的可能是8GB,但如果太多,我会考虑将其拆分为1GB。它必须快达30MBytes / s。我发现了三种方法:用于顺序操作FileStream或StreamReader / StreamWriter,用于随机访问MemoryMappedFiles。 现在我想先读取文件。以下是一个有效的代码示例:

 FileStream fileStream = new FileStream(@"C:\Users\Guest4\Desktop\data.txt", FileMode.Open, FileAccess.Read);
try
{
    int length = (int)fileStream.Length;  // get file length
    buffer = new byte[length];            // create buffer
    int count;                            // actual number of bytes read
    sum = 0;                          // total number of bytes read

    // read until Read method returns 0 (end of the stream has been reached)
    while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
        sum += count;  // sum is a buffer offset for next reading
}
finally
{
    fileStream.Close();
}

你认为这是快速阅读大文件的好方法吗?

阅读后我需要重新发送该文件。它必须是16384字节块。每个块都将被发送,直到所有数据都将被传输。而那些块必须是字符串类型。你能建议我怎么做吗?拆分并转换为字符串。我想最好的方法是在读取所有文件之后发送该字符串块,但是如果至少读取了16384个字节。

1 个答案:

答案 0 :(得分:3)

我发现了这样的事情:

            FileStream FS = new FileStream(@"C:\Users\Guest4\Desktop\data.txt", FileMode.Open, FileAccess.ReadWrite);
            int FSBytes = (int) FS.Length;
            int ChunkSize = 1<<14;    // it's 16384
            byte[] B = new byte[ChunkSize];
            int Pos;

            for (Pos = 0; Pos < (FSBytes - ChunkSize); Pos += ChunkSize)
            {
                FS.Read(B,0 , ChunkSize);
                // do some operation on one chunk

            }

            B = new byte[FSBytes - Pos];
            FS.Read(B,0, FSBytes - Pos);
            // here the last operation procedure on the last chunk
            FS.Close(); FS.Dispose();

似乎有效。我希望只有这一部分:     FS.Read(B,0 , ChunkSize); 真的很快。如果有人有任何建议,请不要犹豫。