Udostępnij za pośrednictwem


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 plik (Create lub CreateNew). Wartości ujemne są niedozwolone. W innych przypadkach (w tym wartość domyślna 0) jest ignorowana. Ta wartość jest wskazówką i nie jest silną gwarancją. Nie jest obsługiwana w zestawie internetowym (WASM) i FreeBSD (wartość jest ignorowana). W przypadku systemów Windows, 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. Ostateczna 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 nie ujemna reprezentująca początkowy rozmiar alokacji w bajtach dla pliku.

Wyjątki

Gdy value wartość jest ujemna.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać podczas PreallocationSize 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

PreallocationSize można zażądać tylko dla trybu zapisu (Access musi być ustawiona na Write) i podczas tworzenia nowych plików (Mode musi być ustawiona na Create lub na 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. Tak jest w przypadku zestawu internetowego (WASM) i FreeBSD.

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

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

Gdy plik zostanie zamknięty, a nie wszystkie przydzielone miejsce zostanie zapisane, to, co dzieje się z pozostałym miejscem, zależy od platformy. W systemie 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 2 GB jest wstępnie przydzielane dla pliku, ale tylko 1 GB jest zapisywane. Po zamknięciu pliku długość pliku wynosi 1 GB we wszystkich systemach operacyjnych. W systemie Windows przydzielony rozmiar wynosi również 1 GB, ale w systemach Linux i macOS przydzielony rozmiar jest nadal 2 GB.

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

Dotyczy