2010-10-07 52 views
44

如果符合某些條件,我想將文件從一個目錄複製到另一個目錄而不刪除原始文件。我也想將新文件的名稱設置爲特定的值。C#將文件複製到另一個名稱不同的位置

我使用C#並使用FileInfo類。雖然它有CopyTo方法。它不給我選擇設置文件名。 MoveTo方法允許我重命名文件,刪除原始位置中的文件。

什麼是最好的方式去做這件事?

回答

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

使用File.Copy方法,而不是

如。

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

你可以在newFile中調用它,然後它將相應地重命名它。

+1

會誰downvoted它詳細地談一談? – w69rdy 2010-10-07 12:21:38

29

你也可以嘗試的方法Copy

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

您可以使用File.Copy(oldFilePath,newFilePath)方法或另一種方法是,使用的StreamReader成字符串讀取文件,然後使用的StreamWriter寫該文件到目標位置。

您的代碼可能是這樣的:

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

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

您可以添加異常處理代碼...

+0

你不需要一個讀寫器 - 只需要流就可以了。也;如果您僅複製(默認)流,則不會複製NTFS備選流和審計/安全性等內容。 – 2010-10-07 12:13:20

+0

@March Gravell, 感謝您的輸入。我不太瞭解NTFS替代流。猜猜需要了解它。 – Shekhar 2010-10-07 12:15:28

1

可以在有System.IO.File類使用Copy方法。

4

一種方法是:

File.Copy(oldFilePathWithFileName, newFilePathWithFileName); 

或者你可以使用FileInfo.CopyTo()方法太像這樣:

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

例子:

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

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

如果你只想使用FileInfo類 試試這個

   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

請注意,reader.ReadToEnd()會將所有文件內容加載到內存中。理論上可接受的最大文件大小爲2GB,但即使使用相對較小的文件,這也可能表示問題,尤其是如果您的進程內存不足,則情況更是如此。 – Val 2014-01-27 16:10:56

1

您可以用最簡單的方法是這樣的:

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

這將帶你要求的一切照顧。

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

請不要忘記覆蓋以前的文件!確保添加第三個參數,通過添加第三個參數,允許覆蓋文件。否則,你可以使用try catch來處理異常。

問候, 摹

相關問題