FileStreamOptions.PreallocationSize Egenskap

Definition

Den inledande allokeringsstorleken i byte för filen. Ett positivt värde är endast effektivt när en vanlig fil skapas eller skrivs över (Create eller CreateNew). Negativa värden tillåts inte. I andra fall (inklusive standardvärdet 0) ignoreras det. Det här värdet är ett tips och är ingen stark garanti. Det stöds inte i webbsammansättning (WASM) och FreeBSD (värdet ignoreras). För Windows, Linux och macOS försöker vi förallokera diskutrymmet för att fylla den begärda allokeringsstorleken. Om det visar sig vara omöjligt kommer åtgärden att utlösa ett undantag. Den slutliga fillängden (EOF) bestäms av antalet byte som skrivits till filen.

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

Egenskapsvärde

Ett icke-negativt tal som representerar den initiala allokeringsstorleken i byte för filen.

Undantag

value är negativ.

Exempel

Följande kodexempel visar hur du använder PreallocationSize när du arbetar med FileStream objekt:

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

Kommentarer

PreallocationSize kan endast begäras för skrivläge (Access måste anges till Write) och när du skapar nya filer (Mode måste anges till antingen Create eller till CreateNew). Annars FileStream utlöser konstruktorn ett undantag.

Om operativsystemet, plattformen eller filsystemet inte stöder förallokering PreallocationSize ignoreras det. Detta gäller webbsammansättning (WASM) och FreeBSD.

Om det inte finns tillräckligt med diskutrymme eller om filsystemet inte stöder filer med angiven storlek (exempel: 5 GB fil på FAT32) genereras ett undantag.

Fillängden bestäms av hur många byte som skrivits till filen.

När filen stängs och inte allt allokerat utrymme skrivs till, är det som händer med det återstående utrymmet plattformsberoende. På Windows är det här utrymmet inte längre reserverat för filen. På andra plattformar, till exempel Linux och macOS, förblir den allokerad till filen.

Anta till exempel att 2 GB är förallokerat för en fil, men endast 1 GB skrivs. När filen har stängts är fillängden 1 GB på alla operativsystem. På Windows är den allokerade storleken också 1 GB, men på Linux och macOS är den allokerade storleken fortfarande 2 GB.

Det är tillåtet att skriva mer än vad som ursprungligen förallokerades. Så länge det finns tillräckligt med diskutrymme bör åtgärden lyckas.

Gäller för