FileStreamOptions.PreallocationSize Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Dimensioni di allocazione iniziali in byte per il file. Un valore positivo è effettivo solo quando viene creato o sovrascritto un file normale (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 assoluta. Non è supportato in Assembly Web (WASM) e FreeBSD (il valore viene ignorato). Per Windows, Linux e macOS si proverà a 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
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
PreallocationSize può essere richiesto solo per la modalità di scrittura (Access deve essere impostato su Write) e quando si creano nuovi file (Mode deve essere impostato su Create o su CreateNew). In caso contrario, il FileStream costruttore genererà un'eccezione.
Se il sistema operativo, la piattaforma o il file system non supporta la preallocazione, PreallocationSize viene ignorato. Questo è il caso di Assembly Web (WASM) e FreeBSD.
Se lo spazio su disco non è 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 al file. In altre piattaforme, ad esempio Linux e macOS, rimane allocato 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 è di 1 GB in tutti i sistemi operativi. In Windows, anche le dimensioni allocate sono pari a 1 GB, ma in Linux e macOS le dimensioni allocate sono ancora di 2 GB.
È consentito scrivere più di quello che è stato inizialmente preallocato. Se lo spazio su disco è sufficiente, l'operazione avrà esito positivo.