创建目录,如果存在,则重命名

时间:2014-08-28 12:09:26

标签: asp.net c#-4.0

我正在开发应用程序,我希望如果用户创建文件夹并且它已经存在,那么文件夹应该通过将数字附加到文件夹名称来自动重命名

假设服务器具有名称为Time的文件夹,如果用户再次创建文件夹,则新文件夹将是Time1再次用户创建具有相同名称(时间或时间1)的文件夹,而不是使用Time2创建新文件夹等等...是我到目前为止所做的,但递归总是返回错误的值。

 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;
    }

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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