FileStreamOptions.PreallocationSize Propriedade

Definição

O tamanho inicial da alocação em bytes para o ficheiro. Um valor positivo só é eficaz quando um ficheiro normal está a ser criado ou sobrescrito (Create ou CreateNew). Valores negativos não são permitidos. Noutros casos (incluindo o valor 0 padrão), é ignorado. Este valor é uma pista e não é uma garantia forte. Não é suportado em Web Assembly (WASM) e FreeBSD (o valor é ignorado). Para Windows, Linux e macOS, tentaremos pré-realocar o espaço em disco para preencher o tamanho de alocação solicitado. Se isso se revelar impossível, a operação vai lançar uma exceção. O comprimento final do ficheiro (EOF) será determinado pelo número de bytes gravados no ficheiro.

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 Propriedade

Um número não negativo que representa o tamanho inicial da alocação em bytes para o ficheiro.

Exceções

value é negativo.

Exemplos

O seguinte exemplo de código demonstra como usar PreallocationSize ao trabalhar com 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

Observações

PreallocationSize só pode ser solicitado para o modo de escrita (Access deve ser definido para Write) e ao criar novos ficheiros (Mode deve ser definido para ou Create para CreateNew). Caso contrário, o FileStream construtor lançará uma exceção.

Se o sistema operativo, plataforma ou sistema de ficheiros não suportar pré-alocação, então PreallocationSize é ignorado. Este é o caso do Web Assembly (WASM) e do FreeBSD.

Se não houver espaço em disco suficiente ou se o sistema de ficheiros não suportar ficheiros de determinado tamanho (exemplo: ficheiro de 5 GB no FAT32), é lançada uma exceção.

O comprimento do ficheiro é determinado pelo número de bytes que foram escritos no ficheiro.

Quando o ficheiro é fechado e nem todo o espaço alocado é escrito, o que acontece ao espaço restante depende da plataforma. No Windows, este espaço já não é reservado para o ficheiro. Noutras plataformas, como Linux e macOS, permanece alocada ao ficheiro.

Por exemplo, suponha que 2 GB são pré-alocados para um ficheiro, mas apenas 1 GB é escrito. Após fechar o ficheiro, o comprimento do ficheiro é de 1 GB em todos os sistemas operativos. No Windows, o tamanho alocado também é de 1 GB, mas no Linux e macOS, o tamanho alocado continua a ser de 2 GB.

É permitido escrever mais do que aquilo inicialmente pré-atribuído. Desde que haja espaço suficiente em disco, a operação deverá ter sucesso.

Aplica-se a