FileStreamOptions.PreallocationSize Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.