web-dev-qa-db-fra.com

Trouver tous les fichiers d'un dossier

Je cherche à créer un programme qui trouve tous les fichiers d'un certain type sur mon bureau et les place dans des dossiers spécifiques. Par exemple, tous les fichiers contenant le format .txt doivent figurer dans le dossier Texte.

Des idées quelle serait la meilleure façon d'accomplir cela? Merci.

J'ai essayé ceci:

string startPath = @"%userprofile%/Desktop";
string[] oDirectories = Directory.GetDirectories(startPath, "");
Console.WriteLine(oDirectories.Length.ToString());
foreach (string oCurrent in oDirectories)
    Console.WriteLine(oCurrent);
Console.ReadLine();

La recherche de tous les fichiers a échoué.

45
Oliver K

Beaucoup de ces réponses ne fonctionneront pas, après les avoir essayées moi-même. Essayez ceci:

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
DirectoryInfo d = new DirectoryInfo(filepath);

foreach (var file in d.GetFiles("*.txt"))
{
      Directory.Move(file.FullName, filepath + "\\TextFiles\\" + file.Name);
}

Tous les fichiers .txt du bureau seront déplacés vers le dossier TextFiles.

97
dtsg

Tout d'abord; La meilleure pratique serait d’obtenir le dossier Desktop des utilisateurs avec

string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

Ensuite, vous pouvez trouver tous les fichiers avec quelque chose comme

string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);

Notez qu'avec la ligne ci-dessus, vous trouverez tous les fichiers avec l'extension .txt dans le dossier Bureau de l'utilisateur connecté ET de tous les sous-dossiers.

Ensuite, vous pouvez copier ou déplacer les fichiers en énumérant la collection ci-dessus comme suit:

// For copying...
foreach (string s in files)
{
   File.Copy(s, "C:\newFolder\newFilename.txt");
}

// ... Or for moving
foreach (string s in files)
{
   File.Move(s, "C:\newFolder\newFilename.txt");
}

Veuillez noter que vous devrez inclure le nom de fichier dans votre opération Copy() (ou Move()). Il vous faudra donc trouver un moyen de déterminer le nom de fichier d’au moins l’extension avec laquelle vous faites affaire et de ne pas nommer tous les fichiers de la même manière, comme ce serait le cas dans l’exemple ci-dessus.

Dans cet esprit, vous pouvez également consulter les classes DirectoryInfo et FileInfo. Celles-ci fonctionnent de manière similaire, mais vous pouvez obtenir plus facilement des informations sur vos noms de chemin/fichiers, extensions, etc.

Consultez ces informations pour plus d'informations:

http://msdn.Microsoft.com/en-us/library/system.io.directory.aspx

http://msdn.Microsoft.com/en-us/library/ms143316.aspx

http://msdn.Microsoft.com/en-us/library/system.io.file.aspx

9
Gerald Versluis

Vous pouvez essayer avec Directory.GetFiles et corriger votre modèle

 string[] files = Directory.GetFiles(@"c:\", "*.txt");

 foreach (string file in files)
 {
    File.Copy(file, "....");
 }

 Or Move

 foreach (string file in files)
 {
    File.Move(file, "....");
 }     

http://msdn.Microsoft.com/en-us/library/wz42302f

5
Aghilas Yakoub