在C#中,你可以使用FileStream
和BinaryReader
类来实现文件分割。以下是一个简单的示例,展示了如何将一个文件分割成多个较小的文件,每个文件包含固定大小的数据块。
using System;
using System.IO;
class FileSplitter
{
static void Main()
{
string inputFilePath = "input.txt"; // 输入文件路径
string outputDirectory = "output"; // 输出文件夹路径
int chunkSize = 1024 * 1024; // 每个文件的大小(1MB)
// 确保输出目录存在
if (!Directory.Exists(outputDirectory))
{
Directory.CreateDirectory(outputDirectory);
}
// 读取输入文件的大小
long fileSize = new FileInfo(inputFilePath).Length;
// 计算需要分割的文件数量
int fileCount = (int)Math.Ceiling((double)fileSize / chunkSize);
// 分割文件
for (int i = 1; i <= fileCount; i++)
{
string outputFilePath = Path.Combine(outputDirectory, $"output_{i}.txt");
// 读取当前文件块
using (FileStream inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read))
using (BinaryReader binaryReader = new BinaryReader(inputStream))
{
// 移动到当前文件块的开始位置
inputStream.Seek(i * chunkSize, SeekOrigin.Begin);
// 读取当前文件块的数据
byte[] buffer = binaryReader.ReadBytes((int)(fileSize - inputStream.Position));
// 将当前文件块的数据写入输出文件
using (FileStream outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
using (BinaryWriter binaryWriter = new BinaryWriter(outputStream))
{
binaryWriter.Write(buffer);
}
}
}
Console.WriteLine("文件分割完成!");
}
}
这个示例中,我们首先读取输入文件的大小,然后计算需要分割的文件数量。接下来,我们使用for
循环遍历每个文件块,读取其数据并将其写入一个新的输出文件中。最后,我们关闭所有打开的流并输出完成消息。