如果在C#文件夹中已存在文件名,则更改文件名

4

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


1
你有什么问题?你尝试了什么?“我需要将尽可能多的图像或文件添加到我的文件夹中”是什么意思? - Stealth Rabbi
如果文件名只是“image”,我猜你想让第二个被命名为“image”? - Tomas Jansson
如果文件夹中已经存在一个名为“image1”的文件,而另一个用户想要添加另一张名称为“image1”的图片,那么它应该将新的图片保存为“image2”。 - Henry
6个回答

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
使用File.Exists方法来确定文件是否存在。
然而,需要注意的是可能仍然会出现冲突。例如,在确定存在性之后,文件有可能由其他人保存,但在您调用创建文件之前,因此仍然需要考虑错误。
您可以考虑为每个已保存(上传)的文件赋予唯一名称,并在数据库中引用它们,这样在这种情况下可靠地使用Guid.NewGuid
关于实际保存文件,您有多种选择:可以使用FileStreamFile类公开的静态方法,或者如果您使用FileUpload控件,则使用其方法。请澄清您的情况。
最后,根据其大小和是否正在使用数据库,您可能希望将它们存储为二进制数据,然后名称冲突可能是无关紧要的。

1

您应该能够使用 System.IO.File.Exists 来检查文件名是否已存在...

if(System.IO.File.Exists("image1")){
  //Use a different name
}

当然,您需要根据自己的具体需求对此示例进行更灵活的改进。


1

你可以这样做...

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

然而,如果您将当前日期和时间附加到文件名中保存文件,效果会更好。例如:

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

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/zh-cn/library/system.web.ui.webcontrols.fileupload.saveas.aspx


0

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

如果要操作路径字符串中存在的文件,请看一下 System.IO.Path[MSDN]。它是一个非常好用的实用程序,可以满足您的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接