2017-05-13 190 views
1

我有下面的代碼那份從一個目錄到另一個文本文件,如果存在如何在不覆蓋現有文件的情況下複製文件?

string[] dirs = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly); 
string[] files = Directory.GetFiles(dirs[0]); 

     foreach (string file in files) 
     { 
      string fname = file.Substring(dirs[0].Length + 1); 
      string dist = Path.Combine(dirs[1], fname); 
      File.Copy(file, dist, true); 
     } 

我正在尋找的是將文件複製到目標目錄,而不會覆蓋,但保留覆蓋文件兩個文件。正如在Windows中,例如多次命名爲「測試」的文件的副本將是

test 
test - Copy 
test - Copy (2) 
test - Copy (3) 
text 
text- Copy 
text- Copy (2) 
text- Copy (3) 

任何幫助,將不勝感激。

回答

1

更改

File.Copy(file, dist, true); 

File.Copy(file, dist, false); 

如果您在MSDN

public static void Copy(string sourceFileName, string destFileName, bool overwrite) 

參數
sourceFileName類型已經看過:系統。字符串要複製的文件。
destFileName類型:System.String目標文件的名稱。
這不能是一個目錄。
覆蓋類型:System.Boolean如果可覆蓋目標文件 ,則爲true;否則,是錯誤的。

而且在不斷變化的目標文件名,並試圖複製,直到成功的方式添加異常處理

更新1 你可以嘗試使用類似的代碼上面。這對我來說似乎比您提供的鏈接更短。我沒有對任何可能的情況進行過測試,但對於存在「tmp - copy.txt」和「tmp - copy(1).txt」等簡單情況下複製「tmp.txt」,這是行得通的。

UPDATE 2呀抱歉,有使用。選擇和僅比.Count之間我有固定它

 string sourcePath = @"c:\Users\Admin\Desktop\tmp\test1\"; 
     string destinationPath = @"c:\Users\Admin\Desktop\tmp\test2\"; 
     string[] files = Directory.GetFiles(sourcePath); 

     foreach (string file in files) 
     { 
      string fname = file.Substring(sourcePath.Length); 
      string dest = Path.Combine(destinationPath, fname); 
      if (File.Exists(dest)) 
      { 
       var existingFiles = Directory.GetFiles(destinationPath); 
       var fileNum = existingFiles.Count(x => x.Substring(destinationPath.Length).StartsWith(Path.GetFileNameWithoutExtension(fname))); 
       dest = Path.Combine(destinationPath, Path.GetFileNameWithoutExtension(dest) + " copy" + (fileNum > 1 ? " (" + (fileNum - 1) + ")" : "") + Path.GetExtension(dest)); 
       File.Copy(file, dest); 
      } 
      else 
      { 
       File.Copy(file, dest); 
      } 
     } 

重複相同的文件夾,以相同的目標文件夾的副本的結果後的5倍是一個小錯誤如下:enter image description here

+0

但是這會通過'file already exists'異常! – FSm

+0

@FSm對不起,忘了添加有關添加處理 –

+0

@FSM如果你不知道該怎麼辦我可以寫代碼 –

1
 string extention = ".txt"; 
     string originalFileName = string.Format("test{0}", extention); 
     string duplicateFileName = "test"; 
     string changedName = duplicateFileName; 

     int count = 1; 
     while (File.Exists(changedName + extention)) 
     { 
      changedName = string.Format("{0} - Copy ({1})", 
       duplicateFileName, count++); 
     } 
     File.Copy(originalFileName, changedName + extention); 
相關問題