División de archivos MBOX
Dividir almacenamiento MBOX/Cancelar operación de división
Aspose.Email ofrece métodos para dividir archivos de buzón grandes en fragmentos manejables. Esto ayuda a mejorar el rendimiento y la eficiencia de memoria, especialmente al trabajar con archivos extensos de correo. Las opciones de división disponibles varían según la versión de .NET que esté usando.
APIs compatibles por versión de .NET
Para .NET Framework 4.5 y .NET Core
Puede segmentar datos MBOX usando el SplitInto método del MboxStorageReader clase, con la opción de incluir un token de cancelación o personalizar el nombre del archivo de salida:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token)
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token)
Parámetros:
- chunkSize: El tamaño aproximado de cada fragmento en bytes.
- outputPath: La ruta de carpeta donde se crearán los fragmentos.
- partFileNamePrefix: El prefijo que se añadirá al nombre de archivo de cada parte.
- token: Un CancellationToken que permite la posible cancelación de la operación.
Para versiones de .NET inferiores a 4.5
Las versiones anteriores admiten lo mismo SplitInto método pero sin tokens de cancelación:
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix)
-
Cancel() - Usado para interrumpir el proceso de división a mitad de camino.
Ejemplos de código para división controlada con cancelación
Los siguientes ejemplos de código demuestran cómo dividir un archivo en hasta 5 partes, cancelando automáticamente la operación posteriormente:
.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();
Por debajo de .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 archivos MBOX grandes de forma asíncrona
Trabajar con archivos de correo electrónico grandes puede ser ineficiente y consumir mucha memoria. Para mejorar el rendimiento y la manejabilidad, Aspose.Email para .NET proporciona el asíncrono SplitIntoAsync método, que le permite dividir archivos grandes en fragmentos más pequeños, sin bloquear el hilo principal. El ejemplo de código a continuación muestra cómo usar MboxStorageReader.CreateReaderAsync para abrir un archivo MBOX grande de forma asíncrona y luego llamar a SplitIntoAsync para dividirlo en archivos más pequeños, cada uno con un tamaño máximo de 10 MB. Los fragmentos resultantes se guardan en el directorio de salida especificado usando el prefijo "chunk_".
using (var reader = await MboxStorageReader.CreateReaderAsync("input.mbox", new MboxLoadOptions()))
{
await reader.SplitIntoAsync(10 * 1024 * 1024, "outputDirectory", "chunk_", CancellationToken.None);
}