Condividi tramite


FileStreamOptions.PreallocationSize Proprietà

Definizione

Dimensioni iniziali di allocazione in byte per il file. Un valore positivo è efficace solo quando viene creato o sovrascritto un file regolare (Create o CreateNew). I valori negativi non sono consentiti. In altri casi (incluso il valore predefinito 0), viene ignorato. Questo valore è un hint e non è una garanzia forte. Non è supportato in Assembly Web (WASM) e FreeBSD (il valore viene ignorato). Per Windows, Linux e macOS si tenterà di preallocare lo spazio su disco per riempire le dimensioni di allocazione richieste. Se ciò risulta impossibile, l'operazione genererà un'eccezione. La lunghezza finale del file (EOF) verrà determinata dal numero di byte scritti nel file.

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

Valore della proprietà

Numero non negativo che rappresenta le dimensioni iniziali di allocazione in byte per il file.

Eccezioni

Quando value è negativo.

Esempio

Nell'esempio di codice seguente viene illustrato come usare quando si usano PreallocationSizeFileStream oggetti:

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

Commenti

PreallocationSizepuò essere richiesto solo per la modalità di scrittura ( deve essere impostato su ) e quando si creano nuovi file (AccessMode deve essere impostato su Create o su CreateNew).Write In caso contrario, il costruttore genererà un'eccezione FileStream .

Se il sistema operativo, la piattaforma o il file system non supporta la preallevazione, viene PreallocationSize ignorato. Questo è il caso di Assembly Web (WASM) e FreeBSD.

Se non è presente spazio su disco sufficiente o il file system non supporta i file di dimensioni specificate(ad esempio: 5 GB di file in FAT32), viene generata un'eccezione.

La lunghezza del file è determinata dal numero di byte scritti nel file.

Quando il file viene chiuso e non tutto lo spazio allocato viene scritto in, ciò che accade allo spazio rimanente dipende dalla piattaforma. In Windows questo spazio non è più riservato per il file. In altre piattaforme, ad esempio Linux e macOS, rimane allocata al file.

Si supponga, ad esempio, che 2 GB sia preallocato per un file, ma viene scritto solo 1 GB. Dopo aver chiuso il file, la lunghezza del file è 1 GB in tutti i sistemi operativi. In Windows la dimensione allocata è anche 1 GB, ma in Linux e macOS, la dimensione allocata è ancora 2 GB.

È consentito scrivere più di quello che è stato inizialmente preallocato. Purché sia presente spazio su disco sufficiente, l'operazione deve avere esito positivo.

Si applica a