文件名更改(如果存在于C#中的文件夹中)

时间:2011-08-11 17:09:54

标签: c# .net asp.net

在我的应用程序中,我需要将文件(image,pdf,txt)保存到文件夹中。 我需要在我的文件夹中添加尽可能多的图像或文件。 假设我有一个名为“image1”的图像,如果已经存在的话 在该文件夹中,如果另一个用户尝试添加具有该名称的另一个图像 “image1”然后我的应用程序自动需要将imagename更改为“image2”。 因此应用程序应检查文件是否存在,如果存在则保存 具有不同名称的新图像。 任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:2)

使用File.Exists方法确定是否存在文件。

但是,必须指出仍可能发生冲突。例如,存在竞争条件,该文件可能由其他人之后保存,以确定是否存在,但之前创建文件,所以你仍然需要考虑错误。

您可能会考虑为每个保存(上传?)文件提供一个唯一的名称,并在数据库中引用它们 - 在这种情况下,您可以非常可靠地使用Guid.NewGuid

至于实际保存文件,您有很多选项:您可以使用FileStreamFile类公开的静态方法,或FileUpload控件的方法#39;重新使用它。请澄清你的情况。

最后,根据大小的不同,如果正在使用数据库,您可能要考虑将它们存储为二进制数据,然后名称冲突可能无关紧要。

答案 1 :(得分:2)

当然,您可以检查文件是否与System.IO.File.Exists(...)一起存在,但我认为您的要求可能有点过于乐观......您应该考虑多种情​​况。假设你有:

upload.extension
upload1.extension
upload01.extension
upload001.extension

上面的名称表明你应该有一些命名约定,但是命名约定不会是通用的(除非你想要有一堆命名约定来涵盖所有这些情况)。如果用户想要保存名为“upload”的文件,并且您的命名约定声明文件名将以没有前导数字的数字递增,那么您将尝试“upload1”,如果不可用,那么“upload2”直到您找一个可用的。

让我们假设添加一个没有前导零的数字的惯例:

int i = 0
string fileExtension = ".extension";
string availableFileName = fileName;
while(System.IO.File.Exists(availableFileName+fileExtension))
{
    availableFileName = fileName + i;
    i++;
}
fileUpload.SaveAs(availableFileName+fileExtension);

这将在文件名的末尾附加一个整数,直到找到不重复的文件名。

答案 2 :(得分:1)

您应该能够使用System.IO.File.Exists ...

检查文件名是否已存在
if(System.IO.File.Exists("image1")){
  //Use a different name
}

当然,您需要优化此示例,以便更灵活地满足您的特定需求。

答案 3 :(得分:1)

你可以这样做......

 if (System.IO.File.Exists("Path"))
    {
        fileUpload1.SaveAs("Path + New FileName");
    }

但是,如果您使用文件名附加Current DataTime来保存文件会更好。 e.g。

fileUpload1.SaveAs("Path + Orginal FileName" + DateTime.Now.ToString("yyyy-MM-dd HHmmtt") + "File Extension";

答案 4 :(得分:0)

您可以使用System.IO.File.Exists [MSDN] 方法检查文件是否存在。它以路径字符串作为参数。

如果文件存在,操作路径字符串,请查看System.IO.Path [MSDN] 。它可以满足您的需求。

答案 5 :(得分:0)

我已成功解决了这个问题,因为任何上传的文件都是由GUID的字符串表示法命名的。

如果需要,您可以维护GUID生成的文件名与数据库中原始文件名之间的映射。

或者只是使用它:

    // Create a temporary file name to use for checking duplicates.
    string tempfileName = "";

    // Check to see if a file already exists with the
    // same name as the file to upload.        
    if (System.IO.File.Exists(pathToCheck)) 
    {
      int counter = 2;
      while (System.IO.File.Exists(pathToCheck))
      {
        // if a file with this name already exists,
        // prefix the filename with a number.
        tempfileName = counter.ToString() + fileName;
        pathToCheck = savePath + tempfileName;
        counter ++;
      }

      fileName = tempfileName;
}

来源:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.saveas.aspx