FileStreamOptions.PreallocationSize Vlastnost

Definice

Počáteční velikost přidělení souboru v bajtech. Kladná hodnota je účinná jenom v případě, že 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 tato hodnota ignoruje. Tato hodnota představuje nápovědu a není silnou zárukou. Není podporován ve webových sestaveních (WASM) a FreeBSD (hodnota je ignorována). Ve Windows, Linuxu a macOS se pokusíme předem přidělit místo na disku, abychom vyplnili požadovanou 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í souboru v bajtech.

Výjimky

Když 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 v režimu zápisu (Access musí být nastaveno na Write) a při vytváření nových souborů (Mode musí být nastaveno na nebo Create na CreateNew). V opačném FileStream případě konstruktor vyvolá výjimku.

Pokud operační systém, platforma nebo systém souborů nepodporuje předběžné přidělení, PreallocationSize bude se ignorovat. To je případ webových sestavení (WASM) a FreeBSD.

Pokud není dostatek místa na disku nebo systém souborů nepodporuje soubory dané velikosti (příklad: 5GB soubor v systému souborů FAT32), vyvolá se výjimka.

Délka souboru je určena počtem bajtů, které byly do souboru zapsány.

Pokud je soubor zavřený a ne všechny přidělené místo jsou zapsány do, co se stane se zbývajícím místem, závisí na platformě. Ve Windows už není toto místo pro soubor vyhrazené. Na jiných platformách, jako je Linux a macOS, zůstane soubor přidělený souboru.

Předpokládejme například, že soubor má předem přidělených 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. Ve 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é psát více, než bylo původně předem přiděleno. Pokud je na disku dostatek místa, měla by operace proběhnout úspěšně.

Platí pro