Aracılığıyla paylaş


FileStreamOptions.PreallocationSize Özellik

Tanım

Dosyanın bayt cinsinden ilk ayırma boyutu. Pozitif değer yalnızca normal bir dosya oluşturulurken veya üzerine yazılırken (Create veya CreateNew) etkilidir. Negatif değerlere izin verilmez. Diğer durumlarda (varsayılan 0 değeri dahil) yoksayılır. Bu değer bir ipucudur ve güçlü bir garanti değildir. Web Derlemesi (WASM) ve FreeBSD'de desteklenmez (değer yoksayılır). Windows, Linux ve macOS için disk alanını istenen ayırma boyutunu dolduracak şekilde önceden yerleştirmeyi deneyeceğiz. Bu mümkün değilse, işlem bir özel durum oluşturur. Son dosya uzunluğu (EOF), dosyaya yazılan bayt sayısına göre belirlenir.

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

Özellik Değeri

Dosya için bayt cinsinden ilk ayırma boyutunu temsil eden negatif olmayan bir sayı.

Özel durumlar

Negatif olduğunda value .

Örnekler

Aşağıdaki kod örneği, nesnelerle FileStream çalışırken nasıl kullanılacağını PreallocationSize gösterir:

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

Açıklamalar

PreallocationSizeyalnızca yazma modu için istenebilir (Access olarak ayarlanmalıdırWrite) ve yeni dosyalar oluştururken (Mode veya CreateNewolarak ayarlanmalıdırCreate). Aksi takdirde, FileStream oluşturucu bir özel durum oluşturur.

İşletim sistemi, platform veya dosya sistemi önceden ayrılmayı desteklemiyorsa yoksayılır PreallocationSize . Web Derlemesi (WASM) ve FreeBSD için bu durum söz konusudur.

Yeterli disk alanı yoksa veya dosya sistemi belirli boyuttaki dosyaları desteklemiyorsa (örneğin: FAT32'de 5 GB dosya), bir özel durum oluşturulur.

Dosya uzunluğu, dosyaya kaç bayt yazıldığına göre belirlenir.

Dosya kapatıldığında ve ayrılan alanın tümü yazılmadığında, kalan alana ne olacağı platforma bağlıdır. Windows'da bu alan artık dosya için ayrılmaz. Linux ve macOS gibi diğer platformlarda dosyaya ayrılmış olarak kalır.

Örneğin, bir dosya için 2 GB'ın önceden ayrılmış olduğunu, ancak yalnızca 1 GB yazılmış olduğunu varsayalım. Dosya kapatıldıktan sonra dosya uzunluğu tüm işletim sistemlerinde 1 GB olur. Windows'da ayrılan boyut da 1 GB'tır, ancak Linux ve macOS'ta ayrılan boyut hala 2 GB'tır.

Başlangıçta önceden ayrılandan daha fazlasını yazmak mümkündür. Yeterli disk alanı olduğu sürece işlemin başarılı olması gerekir.

Şunlara uygulanır