FileStreamOptions.PreallocationSize Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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.