FileStreamOptions.PreallocationSize Właściwość

Definicja

Początkowy rozmiar alokacji w bajtach dla pliku. Wartość dodatnia jest skuteczna tylko wtedy, gdy jest tworzony lub zastępowany zwykły plik (Create lub CreateNew). Wartości ujemne są niedozwolone. W innych przypadkach (w tym domyślna wartość 0) jest ignorowana. Ta wartość jest wskazówką i nie jest silną gwarancją. Nie jest obsługiwany w zestawie internetowym (WASM) i FreeBSD (wartość jest ignorowana). W przypadku Windows system Linux i macOS spróbujemy wstępnie przydzielić miejsce na dysku, aby wypełnić żądany rozmiar alokacji. Jeśli okaże się to niemożliwe, operacja zgłosi wyjątek. Końcowa długość pliku (EOF) będzie określana przez liczbę bajtów zapisanych w pliku.

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

Wartość właściwości

Liczba nieujemna reprezentująca początkowy rozmiar alokacji w bajtach dla pliku.

Wyjątki

value jest ujemna.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać PreallocationSize podczas pracy z obiektami FileStream :

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

Uwagi

PreallocationSizeMożna zażądać tylko dla trybu zapisu (Access musi być ustawiona na Write) i podczas tworzenia nowych plików (Mode musi być ustawiona wartość Create lub ).CreateNew FileStream W przeciwnym razie konstruktor zgłosi wyjątek.

Jeśli system operacyjny, platforma lub system plików nie obsługuje wstępnej alokacji, PreallocationSize zostanie zignorowany. Dotyczy to zestawu internetowego (WASM) i FreeBSD.

Jeśli za mało miejsca na dysku lub system plików nie obsługuje plików o danym rozmiarze (na przykład: 5 GB pliku w systemie FAT32), zgłaszany jest wyjątek.

Długość pliku jest określana przez liczbę bajtów zapisanych w pliku.

Gdy plik zostanie zamknięty i nie wszystkie przydzielone miejsce zostaną zapisane, to, co się stanie z pozostałą przestrzenią, zależy od platformy. W Windows to miejsce nie jest już zarezerwowane dla pliku. Na innych platformach, takich jak Linux i macOS, pozostaje przydzielona do pliku.

Załóżmy na przykład, że przydział 2 GB jest wstępnie przydzielany dla pliku, ale zapisywane jest tylko 1 GB. Po zamknięciu pliku długość pliku wynosi 1 GB we wszystkich systemach operacyjnych. Na Windows przydzielony rozmiar wynosi również 1 GB, ale w systemach Linux i macOS przydzielony rozmiar jest nadal 2 GB.

Dopuszczalne jest napisanie więcej niż to, co początkowo zostało wstępnie przeniesione. Tak długo, jak jest wystarczająca ilość miejsca na dysku, operacja powinna zakończyć się pomyślnie.

Dotyczy