2014-08-28 35 views
1

我正在開發的應用程序中,我想,如果用戶創建文件夾,如果它已經存在,則文件夾應該通過附加號碼的文件夾名稱自動重命名
創建目錄,如果存在,那麼其重命名爲

假設服務器文件夾與時間現在名稱時間現在如果用戶再次創建文件夾比新文件夾將時間1再次用戶創建具有相同名稱(時間或時間1)的文件夾比新文件夾應創建與時間2等...這是我迄今爲止所做的但遞歸總是返回錯誤的值。

public string checkIfExist(String path, String ProgramName, int itteration,out string strFolderName) 
    { 
     String uploadPath = ""; 
     strFolderName = ""; 
     String Mappath =HttpContext.Current.Server.MapPath(path); 
     if (Directory.Exists(Mappath)) 
     { 
      String Path = HttpContext.Current.Server.MapPath((path + "" + ProgramName.Replace(" ", "_"))); 
      // uploadPath += ++itteration ; 
      if (Directory.Exists(Path)) 
      { 
       ProgramName += ++itteration; 
       strFolderName = ProgramName; 
       uploadPath = checkIfExist(path, ProgramName, itteration,out strFolderName); 

      } 
     } 

     return ProgramName; 
    } 
+0

我已經更新了我的問題,並把代碼我這樣做很遠 – user2788596 2014-08-28 12:15:13

回答

2

也許你可以適應這個,你的需要。我基於一段我記得在某個項目中使用的舊文件管理器中記錄的代碼進行了編寫,因此請進行測試。 這不包括創建等,根據你的例子我相信你可以自己添加,但如果你需要幫助,只需在下面評論。

想法是傳遞您想要的目錄的原始名稱,然後返回一個適當的新名稱(如果存在),例如Test(1),Test(2),Test(n)。然後一旦你得到你需要的名字,你可以直接創建它。

protected string GetUniqueDirectoryName(string dirName) 
{ 
    string newDirName = dirName; 

    for (int i = 1; Directory.Exists(Server.MapPath("PATH_HERE") + newDirName); i++) 
    { 
    newDirName = string.Format("{0}({1})", dirName, i); 
    } 

    return newDirName; 
} 

注意:您將需要包括System.IO和可能使用HttpContext.Current.Server.MapPath,而不是使用Server.Mappath

+1

謝謝你,它爲我工作。 – user2788596 2014-08-28 12:50:10

2

我不知道我是否真的明白你在做什麼,但我認爲在這裏使用遞歸有點矯枉過正。嘗試這樣的:

string dirName = "Time"; 
int counter = 0; 

string dir = dirName; 

while(Directory.Exists(dir)) 
{ 
    dir = String.Format("{0}{1}", dirName, (++counter).ToString()); 
} 

Directory.CreateDirectory(dir); 
相關問題