J'utilise la méthode suivante pour copier le contenu d'un répertoire dans un répertoire différent.Méthode de copie de grandes quantités de données en C#
public void DirCopy(string SourcePath, string DestinationPath)
{
if (Directory.Exists(DestinationPath))
{
System.IO.DirectoryInfo downloadedMessageInfo = new DirectoryInfo(DestinationPath);
foreach (FileInfo file in downloadedMessageInfo.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories())
{
dir.Delete(true);
}
}
//=================================================================================
string[] directories = System.IO.Directory.GetDirectories(SourcePath, "*.*", SearchOption.AllDirectories);
Parallel.ForEach(directories, dirPath =>
{
Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
});
string[] files = System.IO.Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories);
Parallel.ForEach(files, newPath =>
{
File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true);
});
}
Mon seul problème est qu'il ya un peu de données dans le chemin source et le programme devient non réactif alors que la copie est en cours. Je me demande quelles sont mes options pour copier des données. J'ai fait des recherches et quelqu'un a recommandé d'utiliser un tampon.
Je n'ai pas vraiment vu de solution que je comprends particulièrement bien, donc toute aide/ressources qui sont claires et concises serait géniale.
Merci pour toute aide!
Vous pouvez utiliser un thread séparé pour exécuter au lieu de courir dans le thread d'interface utilisateur. –
pouvez-vous quantifier certaines des choses que vous copiez? Comme les répertoires, les fichiers, la quantité de données que vous transférez, vous utilisez peut-être le mauvais outil pour le travail – konkked
Est-ce une application d'interface utilisateur? Si c'est le cas, faites cela dans un thread d'arrière-plan. Par exemple via 'Task.Run' –