Compartir vía


FileStreamOptions.PreallocationSize Propiedad

Definición

Tamaño de asignación inicial en bytes para el archivo. Un valor positivo solo es efectivo cuando se crea o se sobrescribe un archivo normal (Create o CreateNew). No se permiten valores negativos. En otros casos (incluido el valor predeterminado 0), se omite. Este valor es una sugerencia y no es una garantía fuerte. No se admite en ensamblado web (WASM) y FreeBSD (el valor se omite). Para Windows, Linux y macOS, intentaremos asignar previamente el espacio en disco para rellenar el tamaño de asignación solicitado. Si resulta imposible, la operación producirá una excepción. La longitud final del archivo (EOF) se determinará por el número de bytes escritos en el archivo.

public:
 property long PreallocationSize { long get(); void set(long value); };
public long PreallocationSize { get; set; }
member this.PreallocationSize : int64 with get, set
Public Property PreallocationSize As Long

Valor de propiedad

Número no negativo que representa el tamaño de asignación inicial en bytes para el archivo.

Excepciones

Cuando value es negativo.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar PreallocationSize al trabajar con FileStream objetos :

using System.IO;

public static class PreallocationSizeExample
{
    public static void Main()
    {
        string destinationPath = "destination.dll";

        var openForReading = new FileStreamOptions { Mode = FileMode.Open };
        using var source = new FileStream(typeof(PreallocationSizeExample).Assembly.Location, openForReading);

        var createForWriting = new FileStreamOptions
        {
            Mode = FileMode.CreateNew,
            Access = FileAccess.Write,
            PreallocationSize = source.Length // specify size up-front
        };
        using var destination = new FileStream(destinationPath, createForWriting);

        source.CopyTo(destination); // copies the contents of the assembly file into the destination file
    }
}
Imports System.IO

Module PreallocationSizeExample

    Sub Main()

        Dim destinationPath As String = "destination.dll"
        Dim openForReading = New FileStreamOptions With {
            .Mode = FileMode.Open
        }

        Using source = New FileStream(GetType(PreallocationSizeExample).Assembly.Location, openForReading)

            Dim createForWriting = New FileStreamOptions With {
                .Mode = FileMode.CreateNew,
                .Access = FileAccess.Write,
                .PreallocationSize = source.Length ' specify size up-front
            }

            Using destination = New FileStream(destinationPath, createForWriting)
                source.CopyTo(destination) ' copies the contents of the assembly file into the destination file
            End Using

        End Using

    End Sub

End Module

Comentarios

PreallocationSizesolo se puede solicitar para el modo de escritura ( debe establecerse Writeen ) y al crear nuevos archivos (Mode debe establecerse Create en o en CreateNew).Access De lo contrario, el FileStream constructor producirá una excepción.

Si el sistema operativo, la plataforma o el sistema de archivos no admiten la asignación previa, PreallocationSize se omite. Este es el caso de Web Assembly (WASM) y FreeBSD.

Si no hay suficiente espacio en disco o el sistema de archivos no admite archivos de tamaño determinado (por ejemplo: 5 GB en FAT32), se produce una excepción.

La longitud del archivo viene determinada por el número de bytes que se escribieron en el archivo.

Cuando se cierra el archivo y no se escribe todo el espacio asignado, lo que sucede con el espacio restante depende de la plataforma. En Windows, este espacio ya no está reservado para el archivo. En otras plataformas, como Linux y macOS, permanece asignado al archivo.

Por ejemplo, suponga que 2 GB está asignado previamente para un archivo, pero solo se escriben 1 GB. Después de cerrar el archivo, la longitud del archivo es de 1 GB en todos los sistemas operativos. En Windows, el tamaño asignado también es de 1 GB, pero en Linux y macOS, el tamaño asignado sigue siendo de 2 GB.

Es permisible escribir más que lo que inicialmente se preasignó. Siempre que haya suficiente espacio en disco, la operación debe realizarse correctamente.

Se aplica a