FileStreamOptions.PreallocationSize Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Počáteční velikost přidělení souboru v bajtech. Kladná hodnota je platná pouze v případech, kdy se vytváří nebo přepisuje běžný soubor (Create nebo CreateNew). Záporné hodnoty nejsou povoleny. V jiných případech (včetně výchozí hodnoty 0) se ignoruje. Tato hodnota je nápověda a není silnou zárukou. Nepodporuje se ve webovém sestavení (WASM) a FreeBSD (hodnota je ignorována). Pro Windows, Linux a macOS se pokusíme předem přidělit místo na disku, aby se vyplnila požadovaná velikost přidělení. Pokud se to ukáže jako nemožné, operace vyvolá výjimku. Konečná délka souboru (EOF) bude určena počtem bajtů zapsaných do souboru.
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
Hodnota vlastnosti
Nezáporné číslo, které představuje počáteční velikost přidělení v bajtech souboru.
Výjimky
value je negativní.
Příklady
Následující příklad kódu ukazuje použití PreallocationSize při práci s FileStream objekty:
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
Poznámky
PreallocationSize lze požadovat pouze pro režim zápisu (Access musí být nastaven na Write) a při vytváření nových souborů (Mode musí být nastavena na hodnotu nebo Create na CreateNew). FileStream V opačném případě konstruktor vyvolá výjimku.
Pokud operační systém, platforma nebo systém souborů nepodporuje předběžné umístění, bude PreallocationSize ignorován. Toto je případ webového sestavení (WASM) a FreeBSD.
Pokud není dostatek místa na disku nebo systém souborů nepodporuje soubory s danou velikostí (například: 5 GB souboru na FAT32), vyvolá se výjimka.
Délka souboru je určena počtem bajtů, které byly do souboru zapsány.
Když je soubor zavřený a nezapíše se do nich veškerý přidělený prostor, co se stane se zbývajícím místem, je závislé na platformě. Na Windows už není toto místo vyhrazené pro soubor. Na jiných platformách, jako je Linux a macOS, zůstane soubor přidělený.
Předpokládejme například, že pro soubor je předem přiděleno 2 GB, ale zapíše se jenom 1 GB. Po zavření souboru je délka souboru ve všech operačních systémech 1 GB. Na Windows je přidělená velikost také 1 GB, ale v Linuxu a macOS je přidělená velikost stále 2 GB.
Je možné napsat více než to, co bylo původně předem přiděleno. Pokud je dostatek místa na disku, měla by operace proběhnout úspěšně.