2012-08-08 28 views
36

Sto cercando di creare un programma che trovi tutti i file di un certo tipo sul mio desktop e li collochi in cartelle specifiche, ad esempio, avrei tutti i file con .txt nella cartella Testo.Trova tutti i file in una cartella

Qualche idea quale sarebbe il modo migliore per realizzare questo? Grazie.

Ho provato questo:

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

Non era riuscita a trovare tutti i file.

+0

Verifica descrizione aggiornata. –

+0

Che cosa hai provato? Ti suggerisco di iniziare da [DirectoryInfo] (http://msdn.microsoft.com/en-us/library/system.io.directoryinfo) e [FileInfo] (http://msdn.microsoft.com/en-us /library/system.io.fileinfo). –

risposta

78

Molte di queste risposte in realtà non funzionano, dopo averle provate personalmente. Dare a questo un andare:

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

Sarà spostare tutti i file .txt sul desktop alla cartella TextFiles.

+3

Perfetto. Grazie. –

5

Si può provare con Directory.GetFiles e riparare il vostro modello

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

Va bene, funzionerà come un loop? –

+0

aggiunto loop allo script –

8

Prima di tutto; migliori prassi sarebbe quella di ottenere la cartella utenti desktop con

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

Quindi è possibile trovare tutti i file con qualcosa come

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

Nota che con la linea di cui sopra, troverete tutti i file con .txt estensione nella cartella Desktop dell'utente connesso e di tutte le sottocartelle.

Poi si potrebbe copiare o spostare i file enumerando la raccolta di cui sopra come

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

Si prega di notare che si dovrà includere il nome del file nella vostra operazione Copy() (o Move()). Quindi dovresti trovare un modo per determinare il nome del file almeno dell'estensione che hai a che fare e non nominare tutti i file allo stesso modo di come accadrebbe nell'esempio sopra.

Con questo in mente si potrebbe anche controllare le classi DirectoryInfo e FileInfo. Questi lavori in modi similair, ma è possibile ottenere informazioni sui vostri Path-/nomi di file, estensioni, ecc più facilmente

prova anche questi per ulteriori informazioni:

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

Non 'File.Copy' copia un file in un altro? Intendi 'File.Move'? – dtsg

+0

Ho pensato che avrebbe avuto l'idea;) Ma per motivi di completezza ho aggiunto entrambe le opzioni. –

+0

Nessun problema;) Questo fallirà comunque nel ciclo foreach, tuttavia, dai a ciascun file lo stesso nome 'newFilename.txt' – dtsg

Problemi correlati