2012-08-08 27 views
36

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.Buscar todos los archivos en una carpeta

¿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 la búsqueda de todos los archivos.

+0

Verificar Descripción Actualizado. –

+0

¿Qué has probado? Le sugiero que comience desde [DirectoryInfo] (http://msdn.microsoft.com/en-us/library/system.io.directoryinfo) y [FileInfo] (http://msdn.microsoft.com/en-us /library/system.io.fileinfo) classes. –

Respuesta

78

Muchas de estas respuestas no funcionarán, habiéndolo probado yo mismo. Pruébalo:

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á todos los archivos .txt en el escritorio a la carpeta TextFiles.

+3

Perfecto. Gracias. –

5

Usted puede tratar con Directory.GetFiles y fijar 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

+0

Bien, ¿funcionará esto como un bucle? –

+0

agregué loop al script –

8

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

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

A continuación, puede encontrar todos los archivos con algo así como

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

Tenga en cuenta que con la línea de arriba se encuentran todos los archivos con un archivo .txt extensión en la carpeta Escritorio del usuario conectado Y todas las subcarpetas.

A continuación, puede copiar o mover los archivos mediante la enumeración de 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 operación Copy() (o Move()). Por lo tanto, debería 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 como lo que sucedería en el ejemplo anterior.

Teniendo esto en cuenta, también puede consultar las clases DirectoryInfo y FileInfo. Estos funcionan de maneras similair, pero se puede obtener información sobre sus Path-/nombres de archivos, extensiones, etc. más fácilmente

consultar los siguientes para más información:

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

+0

¿'File.Copy' no copia un archivo en otro? ¿Te refieres a 'File.Move'? – dtsg

+0

Me imaginé que captaría la idea;) Pero, para completar, he agregado ambas opciones. –

+0

No hay problema;) Sin embargo, esto aún fallará en el bucle foreach, le está dando a cada archivo el mismo nombre de archivo 'newFilename.txt' – dtsg

Cuestiones relacionadas