Probleme repertoire [Résolu]

Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Bonjour à tous,



En faite j'ai un repertoire avec pleins de fichier et je voudrais les copier vers un repertoire, quel est la meilleur méthode ?



J'ai essayé DirectoryInfo et la propriété Move mais c'est pas terrible.



Par avance, merci.

6 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, Essayes Directory.Move( .. )
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
ou File.Copy( ... ), non ?
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2
Salut,
La méthode de Lutinore marche, par contre il me semble pas que les éventuelles sous dossiers soient copiés.
Il faut faire une fonction récursive du style :

//Copie d'un dossier (contenu et dossier enfant avec leur contenu)
public static bool CopyFolder(string SourcePath, string DestPath, bool Deep)
{
bool IsSuccess = true;
Directory.CreateDirectory(DestPath);//création du dossier

//Ajout des fichiers contenus à la racine de SourcePath
string[] CopiedFiles = Directory.GetFiles(SourcePath, "*.*");
foreach (string CopiedFile in CopiedFiles)
{
string PastedFile = CopiedFile.Replace(SourcePath, DestPath);
try
{
File.Copy(CopiedFile, PastedFile, true);
IsSuccess = true;
catch
{
//Permet d'éviter tous un tas de pb
// IsSuccess = false;
}
}

//Ajout des sous-dossiers contenus dans SourcePath
string[] CopiedFolders = Directory.GetDirectories(SourcePath, "*.*");
foreach (string CopiedFolder in CopiedFolders)
{
//Création du sous dossier
string PastedFolder = CopiedFolder.Replace(SourcePath, DestPath);
Directory.CreateDirectory(PastedFolder);

//Ajout des contenus (fichier et dossier) des sous dossiers
if (Deep == true)
{
IsSuccess &= CopyFolder(CopiedFolder, PastedFolder, true);
}
}
return IsSuccess;
}

PS : Je sais c'est pas trop optimisé, mais bon c'est une idée comme ça
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, t_barbillon tu as raison, il faut utiliser la récursivité, voilà une autre version:

// ex: CopyDirectory( "D:\\DATA", "D:\\TEMP\\DATA", true );
private void CopyDirectory( string src, string dst, bool overwrite )
{
if ( !Directory.Exists( dst ) )
Directory.CreateDirectory( dst );


foreach ( string file in Directory.GetFiles( src ) )
File.Copy( file, dst + Path.DirectorySeparatorChar + Path.GetFileName( file ), overwrite );


foreach ( string dir in Directory.GetDirectories( src ) )
CopyDirectory( dir, dst + Path.DirectorySeparatorChar + Path.GetFileName( dir ), overwrite );
}

J'ai pas testé longtemps donc j'espère que ca plante pas ; )
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ok, merci bien.
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ok, merci