Разделение файлов MBOX
Разделить хранилище MBOX/Отменить операцию разбивки
Aspose.Email предоставляет методы для разбивки больших файлов почтовых ящиков на управляемые части. Это помогает улучшить производительность и эффективность использования памяти, особенно при работе с обширными архивами электронной почты. Доступные варианты разделения зависят от версии .NET, которую вы используете.
Поддерживаемые API по версиям .NET
Для .NET Framework 4.5 и .NET Core
Вы можете сегментировать данные MBOX с помощью 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 для .NET предоставляет асинхронный SplitIntoAsync метод, позволяющий делить большие файлы на более мелкие части без блокировки основного потока. Ниже приведён пример кода, показывающий, как использовать MboxStorageReader.CreateReaderAsync для асинхронного открытия большого файла MBOX, а затем вызова SplitIntoAsync для разделения его на более мелкие файлы, каждый из которых имеет максимальный размер 10 МБ. Полученные части сохраняются в указанный выходной каталог с префиксом "chunk_".
using (var reader = await MboxStorageReader.CreateReaderAsync("input.mbox", new MboxLoadOptions()))
{
await reader.SplitIntoAsync(10 * 1024 * 1024, "outputDirectory", "chunk_", CancellationToken.None);
}