Comment copier tous les fichiers d'un répertoire dans un autre répertoire et écraser tous les fichiers existants portant le même nom dans le répertoire cible avec C #?
J'ai le code suivant pour copier les fichiers d'un répertoire vers un autre répertoire ...
const string sourceDir = @"C:\AppProject\Smart\SmartStaff\site\document";
const string targetDir = @"C:\AppProject\Smart\ExternalSmartStaff\site\document";
foreach (var file in Directory.GetFiles(sourceDir))
File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));
..., mais lorsque le répertoire cible contient déjà un fichier du même nom qu'un fichier du répertoire source, il échoue avec l'erreur System.IO.IOException: The file 'C:\AppProject\Smart\ExternalSmartStaff\site\document\SomeDocument.txt' already exists.
.
Pour être clair, étant donné les répertoires et fichiers suivants en eux ...
C:\>dir C:\AppProject\Smart\SmartStaff\site\document
...
Directory of C:\AppProject\Smart\SmartStaff\site\document
09/03/2014 06:38 PM <DIR> .
09/03/2014 06:38 PM <DIR> ..
05/25/2014 08:29 PM 44 SomeDocument.txt
05/25/2014 08:32 PM 21 SomeDocument2.txt
05/25/2014 08:36 PM 21 SomeDocument3.txt
05/25/2014 08:43 PM 44 SomeDocument4.txt
4 File(s) 130 bytes
2 Dir(s) 128,326,766,592 bytes free
C:\>dir C:\AppProject\Smart\ExternalSmartStaff\site\document
...
Directory of C:\AppProject\Smart\ExternalSmartStaff\site\document
09/03/2014 06:39 PM <DIR> .
09/03/2014 06:39 PM <DIR> ..
09/03/2014 06:39 PM 26 SomeDocument.txt
09/03/2014 06:39 PM 54 SomeDocument2.txt
2 File(s) 80 bytes
2 Dir(s) 128,326,766,592 bytes free
..., Je voudrais C:\AppProject\Smart\ExternalSmartStaff\site\document
pour ressembler à ceci après la copie du fichier en C #:
C:\>dir C:\AppProject\Smart\ExternalSmartStaff\site\document
...
Directory of C:\AppProject\Smart\ExternalSmartStaff\site\document
09/03/2014 06:47 PM <DIR> .
09/03/2014 06:47 PM <DIR> ..
05/25/2014 08:29 PM 44 SomeDocument.txt
05/25/2014 08:32 PM 21 SomeDocument2.txt
05/25/2014 08:36 PM 21 SomeDocument3.txt
05/25/2014 08:43 PM 44 SomeDocument4.txt
4 File(s) 130 bytes
2 Dir(s) 128,327,835,648 bytes free
Comment puis-je éviter le IOException
et accomplir cela?
Essaye ça:
const string sourceDir = @"C:\AppProject\Smart\SmartStaff\site\document";
const string targetDir = @"C:\AppProject\Smart\ExternalSmartStaff\site\document";
foreach (var file in Directory.GetFiles(sourceDir))
File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)), true);
Fondamentalement, il vous suffit d'appeler une surcharge différente de File.Copy
. documentation MSDN explique que le troisième paramètre bool
est d'indiquer s'il faut remplacer les fichiers existants par les fichiers copiés.
Plutôt utiliser
Méthode File.Copy (String, String, Boolean)
Copie un fichier existant dans un nouveau fichier. L'écrasement d'un fichier du même nom est autorisé.
Où
overwriteType: System.Boolean
true si le fichier de destination peut être écrasé; sinon, faux.
Ceci est une solution
foreach (string path in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
File.Copy(path, path.Replace(SourcePath, DestinationPath));
Le File.Copy
la méthode a une surcharge qui permet d'écraser les fichiers existants avec le même nom. Voir http://msdn.Microsoft.com/en-us/library/9706cfs5.aspx .