Buscar todos los archivos en una carpeta


Estoy buscando crear un programa que encuentre todos los archivos de un cierto tipo en mi escritorio y los coloque en carpetas específicas, por ejemplo, tendría todos los archivos con .txt en la carpeta de texto.

¿Alguna idea de cuál sería la mejor manera de lograr esto? Gracias.

He intentado esto:

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

No tuvo éxito en encontrar todos los archivos.

Author: Otiel, 2012-08-08

3 answers

Muchas de estas respuestas no funcionarán, habiéndolas probado yo mismo. Dale una oportunidad a esto:

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);
}

Se moverá todo.txt archivos en el escritorio a la carpeta TextFiles.

 84
Author: dtsg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-16 21:09:00

En primer lugar; la mejor práctica sería obtener la carpeta de escritorio de los usuarios con

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

Entonces puedes encontrar todos los archivos con algo como

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

Tenga en cuenta que con la línea anterior encontrará todos los archivos con a .extensión txt en la carpeta de escritorio del usuario registrado Y todas las subcarpetas.

Entonces puede copiar o mover los archivos enumerando la colección anterior como

// 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");
}

Tenga en cuenta que tendrá que incluir el nombre del archivo en su Copy() (o Move()) operación. Por lo tanto, tendría que encontrar una manera de determinar el nombre de archivo de al menos la extensión con la que está tratando y no nombrar todos los archivos de la misma manera como lo que sucedería en el ejemplo anterior.

Con eso en mente, también puedes revisar las clases DirectoryInfo y FileInfo. Estos funcionan de manera similar, pero puede obtener información sobre sus nombres de ruta / archivos, extensiones, etc. más fácilmente

Echa un vistazo a estos para más info:

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

 8
Author: Gerald Versluis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-08 09:50:29

Puede probar con Directorio.GetFiles y arreglar su patrón

 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
Author: Aghilas Yakoub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-08 09:19:16