FileStreamOptions.PreallocationSize Propriété

Définition

Taille d’allocation initiale en octets pour le fichier. Une valeur positive est effective uniquement lorsqu’un fichier normal est en cours de création ou de remplacement (Create ou CreateNew). Les valeurs négatives ne sont pas autorisées. Dans d’autres cas (y compris la valeur par défaut 0), elle est ignorée. Cette valeur est un indice et n’est pas une garantie forte. Il n’est pas pris en charge sur Web Assembly (WASM) et FreeBSD (la valeur est ignorée). Pour Windows, Linux et macOS, nous allons essayer de préallouer l’espace disque pour remplir la taille d’allocation demandée. Si cela s’avère impossible, l’opération va lever une exception. La longueur de fichier finale (EOF) est déterminée par le nombre d’octets écrits dans le fichier.

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

Valeur de propriété

Nombre non négatif qui représente la taille d’allocation initiale en octets pour le fichier.

Exceptions

Quand value est négatif.

Exemples

L’exemple de code suivant montre comment utiliser PreallocationSize lors de l’utilisation d’objets 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

Remarques

PreallocationSize ne peut être demandé que pour le mode d’écriture (Access doit être défini sur Write) et lors de la création de nouveaux fichiers (Mode doit être défini sur Create ou CreateNewsur ). Sinon, le FileStream constructeur lève une exception.

Si le système d’exploitation, la plateforme ou le système de fichiers ne prend pas en charge la préallocation, PreallocationSize est ignoré. C’est le cas pour Web Assembly (WASM) et FreeBSD.

Si l’espace disque est insuffisant ou si le système de fichiers ne prend pas en charge les fichiers de taille donnée (exemple : fichier de 5 Go sur FAT32), une exception est levée.

La longueur du fichier est déterminée par le nombre d’octets écrits dans le fichier.

Lorsque le fichier est fermé et que tout l’espace alloué n’est pas écrit dans, ce qui arrive à l’espace restant dépend de la plateforme. Sur Windows, cet espace n’est plus réservé au fichier. Sur d’autres plateformes, telles que Linux et macOS, il reste alloué au fichier.

Par exemple, supposons que 2 Go sont préalloués pour un fichier, mais que seulement 1 Go est écrit. Après avoir fermé le fichier, la longueur du fichier est de 1 Go sur tous les systèmes d’exploitation. Sur Windows, la taille allouée est également de 1 Go, mais sur Linux et macOS, la taille allouée est toujours de 2 Go.

Il est autorisé d’écrire plus que ce qui a été initialement préalloué. Tant que l’espace disque est suffisant, l’opération doit réussir.

S’applique à