📅  最后修改于: 2023-12-03 14:39:48.055000             🧑  作者: Mango
在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的文件,则可以使用MemoryMappedFile
。MemoryMappedFile
允许您读取大文件而无需将整个文件加载到内存中。下面是一个使用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
来读取文件,并且该流的大小等于文件的大小。
在处理大型文件时,FileStream
和MemoryMappedFile
都是可行的解决方案。使用MemoryMappedFile
的好处是,它可以避免将整个文件加载到内存中,这对于处理大型文件特别有用。