Question

Je dois copier pas mal de fichiers d'un dossier à un autre. Actuellement, je le fais de cette manière:

string[] files = Directory.GetFiles(rootFolder, "*.xml");
foreach (string file in files)
{
    string otherFile = Path.Combine(otherFolder, Path.GetFileName(file));
    File.Copy(file, otherFile);
}

Est-ce le moyen le plus efficace? Semble prendre des siècles.

EDIT: Je demande vraiment s’il existe un moyen plus rapide de copier par lots au lieu de copier des fichiers individuels, mais je suppose que la réponse est non.

Était-ce utile?

La solution

Je ne peux pas penser à un moyen plus efficace que File.Copy, il va directement au système d'exploitation.

D'un autre côté, si cela prend trop de temps, je suggérerais fortement d'afficher un dialogue de progression, comme SHFileOperation le fait pour vous. Au moins, vos utilisateurs sauront ce qui se passe.

Autres conseils

Vous pouvez utiliser le système d'exploitation pour déplacer les fichiers. C'est ce que font des outils comme WinMerge. Vous cliquez sur le bouton "Copier". bouton dans votre application et la fenêtre de progression de Windows apparaît comme si vous aviez utilisé Explorer pour organiser la copie. Ce fil le décrit.

J'ai récemment implémenté mes copies de fichiers à l'aide de filestreams dans VB .NET:

fsSource = New FileStream(backupPath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None, 1024, FileOptions.WriteThrough)
fsDest = New FileStream(restorationPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, 1024, FileOptions.WriteThrough)
TransferData(fsSource, fsDest, 1048576)

    Private Sub TransferData(ByVal FromStream As IO.Stream, ByVal ToStream As IO.Stream, ByVal BufferSize As Integer)
        Dim buffer(BufferSize - 1) As Byte

        Do While IsCancelled = False 'Do While True
            Dim bytesRead As Integer = FromStream.Read(buffer, 0, buffer.Length)
            If bytesRead = 0 Then Exit Do
            ToStream.Write(buffer, 0, bytesRead)
            sizeCopied += bytesRead
        Loop
    End Sub

Cela semble rapide et très facile de mettre à jour la barre de progression (avec sizeCopied) et d’annuler le transfert de fichier si nécessaire (avec IsCancelled).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top