Dividindo Arquivos MBOX
Dividir Armazenamento MBOX/Cancelar Operação de Divisão
Aspose.Email fornece métodos para dividir arquivos de caixa de correio grandes em blocos gerenciáveis. Isso ajuda a melhorar o desempenho e a eficiência de memória, especialmente ao trabalhar com arquivos extensos de e‑mail. As opções de divisão disponíveis variam de acordo com a versão .NET que você está usando.
APIs Suportadas por Versão .NET
Para .NET Framework 4.5 e .NET Core
Você pode segmentar os dados MBOX usando o SplitInto método do MboxStorageReader classe, com a opção de incluir um token de cancelamento ou personalizar a nomeação do arquivo de saída:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token)
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token)
Parâmetros:
- chunkSize: O tamanho aproximado de cada bloco em bytes.
- outputPath: O caminho da pasta onde os blocos serão criados.
- partFileNamePrefix: O prefixo a ser adicionado ao nome de arquivo de cada parte.
- token: Um CancellationToken que permite o possível cancelamento da operação.
Para versões .NET abaixo de 4.5
Versões anteriores suportam o mesmo SplitInto método, mas sem tokens de cancelamento:
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix)
-
Cancel() - Usado para interromper o processo de divisão a meio caminho.
Exemplos de Código para Divisão Controlada com Cancelamento
Os exemplos de código a seguir demonstram como dividir um arquivo em até 5 partes, cancelando automaticamente a operação em seguida:
.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();
Abaixo do .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();
};
Dividir Arquivos MBOX Grandes de Forma Assíncrona
Trabalhar com grandes arquivos de e‑mail pode ser ineficiente e consumir muita memória. Para melhorar o desempenho e a manejabilidade, Aspose.Email para .NET fornece o assíncrono SplitIntoAsync método, que permite dividir arquivos grandes em blocos menores - sem bloquear a thread principal. O exemplo de código abaixo mostra como usar MboxStorageReader.CreateReaderAsync para abrir um arquivo MBOX grande de forma assíncrona e então chamar SplitIntoAsync para dividi‑los em arquivos menores, cada um com tamanho máximo de 10 MB. Os blocos resultantes são salvos no diretório de saída especificado usando o prefixo "chunk_".
using (var reader = await MboxStorageReader.CreateReaderAsync("input.mbox", new MboxLoadOptions()))
{
await reader.SplitIntoAsync(10 * 1024 * 1024, "outputDirectory", "chunk_", CancellationToken.None);
}