📜  c# 读取大文件 - C# (1)

📅  最后修改于: 2023-12-03 14:39:48.055000             🧑  作者: Mango

C# 读取大文件

在C#中,我们可以使用FileStream来读取大文件。FileStream提供了可靠的读取和写入大型数据的方式。下面是一个简单的例子:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = @"C:\myLargeFile.txt";   
        int bufferSize = 1024 * 1024; //1MB
        byte[] buffer = new byte[bufferSize];

        using (FileStream fileStream = new(filePath, FileMode.Open, FileAccess.Read))
        {
            int bytesRead;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                // handle the buffer
            }
        }
    }
}

在此示例中,FileStream打开了一个名为myLargeFile.txt文件,并使用1MB的缓冲区从文件中读取数据,直到文件到达末尾。在循环中,我们可以处理缓冲区中的数据。

但是,如果您需要读取超过2GB的文件,则可以使用MemoryMappedFileMemoryMappedFile允许您读取大文件而无需将整个文件加载到内存中。下面是一个使用MemoryMappedFile来读取大文件的例子:

using System;
using System.IO.MemoryMappedFiles;

class Program
{
    static void Main()
    {
        string filePath = @"C:\myLargeFile.txt";   

        using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateFromFile(filePath))
        {
            using (MemoryMappedViewStream stream = mappedFile.CreateViewStream())
            {
                byte[] buffer = new byte[stream.Length];

                int bytesRead;
                while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    // handle the buffer
                }
            }
        }
    }
}

此示例声明一个名为myLargeFile.txt的文件,并使用MemoryMappedFile从中读取数据。与前一个示例不同的是,我们不再需要缓冲区。相反,我们使用MemoryMappedViewStream来读取文件,并且该流的大小等于文件的大小。

结论

在处理大型文件时,FileStreamMemoryMappedFile都是可行的解决方案。使用MemoryMappedFile的好处是,它可以避免将整个文件加载到内存中,这对于处理大型文件特别有用。