8
votes

Quelle est la meilleure façon de copier un dossier et tous les sous-dossiers et fichiers à l'aide de C #

J'ai besoin de copier un dossier d'un lecteur sur un disque dur amovible. Le dossier qui doit être copié aura de nombreux sous-dossiers et fichiers. L'entrée sera la voie source et le chemin cible.

Comme ..

Chemin de source: "C: \ SourceFolder"

Piste cible: "E: \"

Après la copie terminée, je suis en mesure de voir le dossier "SourceFolder" dans mon E: lecteur.

Merci.

c#

3 commentaires

Ceci est un duplicata, voir: Stackoverflow.com/Questtions/58744/...


Un autre duplicata: Stackoverflow.com/Questtions/627504/...


HM, bien maintenant, les gens ne font que copier des autres questions, donc je vote pour fermer.


7 Réponses :


3
votes

Comment: Copier, supprimer et déplacer des fichiers et des dossiers (Guide de programmation C #) http://msdn.microsoft.com/en-us/library/cc148994.aspx

Comment: Itérater à travers un arborescence de répertoire (Guide de programmation C #) http://msdn.microsoft.com/en-us/library /bb513869.aspx


1 commentaires

Juste FYI, le code sur cette page laisse la partie dont il a vraiment besoin. Notez le commentaire, Pour parcourir de manière récursive à travers tous les sous-dossiers sous le répertoire actuel, voir «Comment: ITERER via un arborescence de répertoire».



8
votes

a trouvé cela à Channel9 . Je ne l'ai pas essayé moi-même.

var source = new DirectoryInfo(@"C:\users\chris\desktop");
source.CopyTo(@"C:\users\chris\desktop_backup", true);


0 commentaires

-1
votes

Pourquoi n'utilisez-vous pas quelque chose comme Robocopy ?

Il dispose d'une option de mise en miroir dans laquelle la structure de répertoire de la source est copiée sous la forme de la destination inot Te. Il existe différentes options de ligne de commande. Pourrait vous faire économiser les efforts pour reproduire les fonctionnalités de votre code.


1 commentaires

Parce que Robocopy est une application externe. Il est toujours préférable d'essayer de faire des choses de manière native dans le code en premier (si ce n'est pas trop compliqué à le faire), avant de recourir à un autre programme pour les faire.



12
votes

Je pense que c'est ça. XXX


1 commentaires

Il a un problème d'autorisation. Pouvez-vous la surmonter?



-1
votes

Et voici un problème différent du problème:

System.Diagnostics.ProcessStartInfo psi =
  new System.Diagnostics.ProcessStartInfo(@"XCOPY C:\folder D:\Backup\folder /i");
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
System.Diagnostics.Process copyFolders = System.Diagnostics.Process.Start(psi);
copyFolders.WaitForExit();


0 commentaires

2
votes
 private static bool CopyDirectory(string SourcePath, string DestinationPath, bool overwriteexisting)
        {
            bool ret = true;
            try
            {
                SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\";
                DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\";

                if (Directory.Exists(SourcePath))
                {
                    if (Directory.Exists(DestinationPath) == false)
                        Directory.CreateDirectory(DestinationPath);

                    foreach (string fls in Directory.GetFiles(SourcePath))
                    {
                        FileInfo flinfo = new FileInfo(fls);
                        flinfo.CopyTo(DestinationPath + flinfo.Name, overwriteexisting);
                    }
                    foreach (string drs in Directory.GetDirectories(SourcePath))
                    {
                        DirectoryInfo drinfo = new DirectoryInfo(drs);
                        if (CopyDirectory(drs, DestinationPath + drinfo.Name, overwriteexisting) == false)
                            ret = false;
                    }
                    Directory.CreateDirectory(DI_Target + "//Database");
                }
                else
                {
                    ret = false;
                }
            }
            catch (Exception ex)
            {
                ret = false;
            }
            return ret;
        }

1 commentaires

quel répertoire.createDirectory (di_target + "// base de données"); est



1
votes

pour les googlers: dans Pure Win32 / C ++, utilisez ShcreateDirectoryex xxx


1 commentaires

Cette question n'a-t-elle pas été question de c #? Pas que je me plainse (toujours susmentionné). Méthode très utile, jsut un peu hors contexte ici