2012-11-29 16 views
9

Sto spostando alcune immagini (nomefile come (1) .PNG, (2) .PNG e così via) da una directory a un'altra. Sto usando il seguente codice:Sposta file in C#

for (int i = 1; i < n; i++) 
{ 
    try 
    { 
     from = "E:\\vid\\(" + i + ").PNG"; 
     to = "E:\\ConvertedFiles\\" + i + ".png"; 

     File.Move(from, to); // Try to move 
     Console.WriteLine("Moved"); // Success 
    } 
    catch (IOException ex) 
    { 
     Console.WriteLine(ex); // Write error 
    } 
} 

Tuttavia, sto ottenendo il seguente errore:

Una prima eccezione di possibilità di tipo System.IO.FileNotFoundException in mscorlib.dll

System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'. 

Inoltre, sono progettando di rinominare i file in modo che il nome del file convertito sia 00001.png, 00002.png ... 00101 e così via.

+4

Domanda sciocca, ma sei sicuro che "E: \ vid (1) .PNG" esiste? – Rotem

+1

'Impossibile trovare il file 'E: \ vid (1) .PNG'' ma il tuo codice dice' E: \\ vid \\ (1) .png' - quindi c'è una barra mancante qui da qualche parte, no? –

+0

Qualcosa non va: il tuo codice si aspetta che i file vengano chiamati '(_num _). Png' e risiedano nella directory' E: \ vid'. I messaggi di errore indicano che stai cercando di "trovare" il file 'vid (_num _). Png' nella directory' E: \\ '. Quindi il messaggio di errore e il codice non corrispondono. Assicurati di aver postato il codice effettivo e il messaggio di errore che corrispondono. –

risposta

11

vi consiglio di utilizzare '@' al fine di sfuggire alle barre in un modo più leggibile. Utilizzare anche Path.Combine(...) per concatenare i percorsi e PadLeft in modo da avere i nomi dei file come specifici.

for (int i = 1; i < n; i++) 
{ 
    try 
    { 
     from = System.IO.Path.Combine(@"E:\vid\","(" + i.ToString() + ").PNG"); 
     to = System.IO.Path.Combine(@"E:\ConvertedFiles\",i.ToString().PadLeft(6,'0') + ".png"); 

     File.Move(from, to); // Try to move 
     Console.WriteLine("Moved"); // Success 
    } 
    catch (IOException ex) 
    { 
     Console.WriteLine(ex); // Write error 
    } 
} 
1

L'eccezione indica che il file E:\vid(1).PNG non esiste. Intendi E:\vid1.PNG?

Utilizzare la classe System.IO.Path per la costruzione di percorsi, è meglio che concatenare le stringhe. Non devi preoccuparti di scappare dalle barre rovesciate.

1
i.ToString() 

potrebbe aiutarti. Si passa

from = "E:\\vid\\(" + i + ").PNG"; 
to = "E:\\ConvertedFiles\\" + i + ".png"; 

i come numero intero e la concatenazione non funziona a causa di quel
e invece di usare \\, aggiungo @ come questo

from = @"E:\vid\(" + i + ").PNG"; 
+2

'ToString()' viene chiamato implicitamente quando contocatena con una stringa. Se questo fosse il problema, il suo codice non sarebbe nemmeno compilato. – Rotem

+0

Amen a quello. vero –

3

Perché non usi qualcosa del genere?

var folder = new DirectoryInfo(@"E:\vid\")); 

if (folder.Exists) 
{ 
    var files = folder.GetFiles(".png"); 
    files.toList().ForEach(f=>File.Move(from,to)); 
} 
1

Ho appena eseguito questo in Visual Studio. Ha funzionato.

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 


namespace ConsoleApplication2 

{ 

    class Program 
    { 
     static void Main() 
     { 
      int n = 3; 
      for (int i = 1; i < n; i++) 
      { 
       string from = "C:\\vid\\(" + i + ").PNG"; 
       string to = "C:\\ConvertedFiles\\" + i + ".png"; 
       { 
        try 
        { 
         File.Move(from, to); // Try to move 
         Console.WriteLine("Moved"); // Success 
        } 
        catch (System.IO.FileNotFoundException e) 
        { 
         Console.WriteLine(e); // Write error 
        } 
       } 
      } 
     } 
    } 

} 

Forse quando si stavano spostando i file in directory vid per iniziare il test, finestre rasati la parentesi. (1) .png diventato 1.png ... Ho ricevuto un errore di file non trovato da quel fenomeno ... altrimenti il ​​tuo codice è solido. La mia versione è quasi identica.

0
var folder = new DirectoryInfo(sourcefolder); 

if (folder.Exists) 
{ 
    var files = folder.GetFiles("*.png"); 
    files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f)); 
} 

Credo che questo aiuterà.