2010-10-07 9 views
44

Wenn bestimmte Bedingungen erfüllt sind, möchte ich eine Datei von einem Verzeichnis in ein anderes kopieren, OHNE die Originaldatei zu löschen. Ich möchte auch den Namen der neuen Datei auf einen bestimmten Wert festlegen.C# Kopieren Sie eine Datei an einen anderen Ort mit einem anderen Namen

Ich verwende C# und war mit FileInfo-Klasse. Es hat zwar die CopyTo-Methode. Es gibt mir nicht die Möglichkeit, den Dateinamen festzulegen. Und die MoveTo-Methode, während ich die Datei umbenennen kann, löscht die Datei am ursprünglichen Speicherort.

Was ist der beste Weg, um darüber zu gehen?

Antwort

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

Mit der Methode anstelle File.Copy

zB.

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

Sie können es nennen, wie Sie in der newFile wollen, und es wird sie entsprechend umbenennen.

+1

Würde wer auch immer es downvoted auszuarbeiten kümmern ?? – w69rdy

29

Sie können auch die Copy Methode versuchen:

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

Sie können entweder File.Copy (oldFilePath, newFilePath) Verfahren oder andere Art und Weise ist, lesen Sie Datei mit Stream in eine Zeichenfolge und dann verwenden Stream verwenden zu schreiben die Datei zum Zielort.

Code könnte wie folgt aussehen:

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

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

Sie Ausnahmebehandlung Code hinzufügen ...

+0

Sie würden dafür keinen Reader/Writer brauchen - nur der Stream wäre in Ordnung. Ebenfalls; NTFS alternative Streams und Dinge wie Audit/Sicherheit werden nicht kopiert, wenn Sie nur den (Standard) Stream kopieren. –

+0

@March Gravell, Danke für Ihre Eingaben. Ich weiß nicht viel über alternative NTFS-Streams .. denke, müssen Sie darüber lernen. – Shekhar

1

Sie die Copy Methode in der System.IO.File Klasse verwenden können.

4

Eine Methode ist:

File.Copy(oldFilePathWithFileName, newFilePathWithFileName); 

Oder können Sie die FileInfo.CopyTo() Methode auch so etwas wie folgt verwenden:

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

Beispiel:

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

oder

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

Wenn Sie nur Klasse Fileinfo verwenden wollen versuchen, diese

   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

Nur Leser beachten. ReadToEnd() wird den gesamten Dateiinhalt in den Speicher laden. Theoretisch akzeptable maximale Dateigröße ist 2 GB, aber dies kann ein Problem darstellen, selbst bei (relativ) kleineren Dateien, besonders wenn Ihr Prozess sonst wenig Speicher hat. – Val

1

Die einfachste Methode, die Sie diese verwenden können, ist:

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

Diese um alles kümmern werden Sie aufgefordert.

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

Bitte vergessen Sie nicht, die vorherige Datei zu überschreiben! Stellen Sie sicher, dass Sie den dritten Parameter hinzufügen. Indem Sie den dritten Parameter hinzufügen, erlauben Sie, dass die Datei überschrieben wird. Sonst könnten Sie einen Versuch Catch für die Ausnahme verwenden.

Grüße, G

Verwandte Themen