2010-10-07 4 views
44

Se si verificano determinate condizioni, voglio copiare un file da una directory a un'altra senza cancellare il file originale. Voglio anche impostare il nome del nuovo file su un valore particolare.C# Copia un file in un'altra posizione con un altro nome

Sto usando C# e stavo usando la classe FileInfo. Mentre ha il metodo CopyTo. Non mi dà la possibilità di impostare il nome del file. E il metodo MoveTo mentre mi consente di rinominare il file, cancella il file nella posizione originale.

Qual è il modo migliore per farlo?

risposta

93
System.IO.File.Copy(oldPathAndName, newPathAndName); 
8

Utilizzare il metodo File.Copy invece

es.

File.Copy(@"C:\oldFile.txt", @"C:\newFile.txt"); 

Puoi chiamarlo come vuoi nel nuovo file, e lo cambierà di conseguenza.

+1

Sarebbe chiunque downvoted si cura di elaborare ?? – w69rdy

29

Si può anche provare il metodo Copy:

File.Copy(@"c:\work\foo.txt", @"c:\data\bar.txt") 
0

È possibile utilizzare il metodo o l'altro modo o File.Copy (oldFilePath, newFilePath) è, leggere il file usando StreamReader in una stringa e quindi utilizzare StreamWriter per scrivere il file nel percorso di destinazione.

Il codice potrebbe essere simile a questo:

StreamReader reader = new StreamReader("C:\foo.txt"); 
string fileContent = reader.ReadToEnd(); 

StreamWriter writer = new StreamWriter("D:\bar.txt"); 
writer.Write(fileContent); 

È possibile aggiungere il codice di gestione delle eccezioni ...

+0

non avresti bisogno di un lettore/scrittore per questo - solo il flusso andrebbe bene. Anche; I flussi alternativi NTFS e cose come audit/sicurezza non verranno copiati se si copia semplicemente il flusso (predefinito). –

+0

@Marc Gravell, Grazie per i vostri input. Non so molto su flussi alternativi NTFS .. ho bisogno di imparare a riguardo. – Shekhar

1

È possibile utilizzare il metodo Copy nella classe System.IO.File.

4

Un metodo è:

File.Copy(oldFilePathWithFileName, newFilePathWithFileName); 

Oppure si può utilizzare il metodo FileInfo.CopyTo() anche qualcosa di simile:

FileInfo file = new FileInfo(oldFilePathWithFileName); 
file.CopyTo(newFilePathWithFileName); 

Esempio:

File.Copy(@"c:\a.txt", @"c:\b.txt"); 

o

FileInfo file = new FileInfo(@"c:\a.txt"); 
file.CopyTo(@"c:\b.txt"); 
8

Se si desidera utilizzare solo classe FileInfo provare questo

   string oldPath = @"C:\MyFolder\Myfile.xyz"; 
      string newpath = @"C:\NewFolder\"; 
      string newFileName = "new file name"; 
      FileInfo f1 = new FileInfo(oldPath); 
      if(f1.Exists) 
      { 
       if(!Directory.Exists(newpath)) 
       { 
        Directory.CreateDirectory(newpath); 
       } 
       f1.CopyTo(string.Format("{0}{1}{2}", newpath, newFileName, f1.Extension)); 
      } 
2
StreamReader reader = new StreamReader(Oldfilepath); 
string fileContent = reader.ReadToEnd(); 

StreamWriter writer = new StreamWriter(NewFilePath); 
writer.Write(fileContent); 
+1

Ricordati che reader.ReadToEnd() carica tutto il contenuto del file nella memoria. La dimensione massima del file teoricamente accettabile è 2 GB, ma questo potrebbe rappresentare un problema anche con i file (relativamente) più piccoli, specialmente se il processo ha poca memoria altrimenti. – Val

1

Il metodo più semplice è possibile utilizzare è questa:

System.IO.File.Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName); 

Questo si prenderà cura di tutto ciò che avete richiesto.

2
File.Copy(@"C:\oldFile.txt", @"C:\newFile.txt", true); 

Si prega di non dimenticare di sovrascrivere il file precedente! Assicurati di aggiungere il terzo parametro, aggiungendo il terzo parametro, permetti al file di essere sovrascritto. Altrimenti potresti usare un catch try per l'eccezione.

saluti, G

Problemi correlati