拆分 MBOX 文件
拆分 MBOX 存储/取消拆分操作
Aspose.Email 提供将大型邮箱文件划分为可管理块的方法。这有助于提升性能和内存效率,尤其是在处理大量邮件归档时。可用的拆分选项取决于您使用的 .NET 版本。
按 .NET 版本支持的 API
针对 .NET Framework 4.5 和 .NET Core
您可以使用 SplitInto 方法的 MboxStorageReader 类,可选择包含取消令牌或自定义输出文件命名:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token)
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token)
参数:
- chunkSize:每个块的大致字节大小。
- outputPath:将创建块的文件夹路径。
- partFileNamePrefix:要添加到每个部分文件名的前缀。
- token:一个 CancellationToken,允许对操作进行可能的取消。
针对 .NET 版本低于 4.5
早期版本支持相同的 SplitInto 方法,但不带取消令牌:
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix)
-
Cancel() - 用于在拆分过程进行到一半时中断。
带取消的受控拆分代码示例
以下代码示例演示了如何将归档拆分为最多 5 部分,并在之后自动取消操作:
.NET 4.5 / .NET Core
int partCount = 0;
var tokenSource = new CancellationTokenSource();
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
// Subscribe to events
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
tokenSource.Cancel();
};
System.Threading.Tasks.Task task = mbox.SplitInto(10000000, outputPath, tokenSource.Token);
task.Wait();
低于 .NET 4.5
int partCount = 0;
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
mbox.SplitInto(10000000, outputPath);
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
mbox.Cancel();
};
异步拆分大型 MBOX 文件
处理大型电子邮件归档可能效率低下且占用大量内存。为提升性能和可管理性,Aspose.Email for .NET 提供了异步 SplitIntoAsync 方法,允许您将大文件拆分为更小的块 —— 不会阻塞主线程。下面的代码示例展示了如何使用 MboxStorageReader.CreateReaderAsync 异步打开大型 MBOX 文件,然后调用 SplitIntoAsync 将其划分为更小的文件,每个文件最大为 10 MB。生成的块使用前缀 "chunk_" 保存到指定的输出目录中。
using (var reader = await MboxStorageReader.CreateReaderAsync("input.mbox", new MboxLoadOptions()))
{
await reader.SplitIntoAsync(10 * 1024 * 1024, "outputDirectory", "chunk_", CancellationToken.None);
}