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

C# 如果C中的文件夹中存在文件名更改#,c#,.net,asp.net,C#,.net,Asp.net,在我的应用程序中,我需要将文件(图像、pdf、txt)保存到文件夹中。 我需要将尽可能多的图像或文件添加到我的文件夹中。 假设我有一个名为“image1”的图像,如果它已经存在的话 在文件夹中,如果另一个用户试图添加另一个具有该名称的图像 “image1”则我的应用程序自动需要将imagename更改为“image2”。 因此,应用程序应该检查文件是否存在,如果存在,则保存 使用其他名称创建新图像。 任何帮助都将不胜感激。使用该方法确定文件是否存在 然而,必须指出,冲突仍然可能发生。例如,存在一

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

使用该方法确定文件是否存在

然而,必须指出,冲突仍然可能发生。例如,存在一个竞争条件,即在调用以确定是否存在文件之后,但在调用创建文件之前,该文件可能会被其他人保存,因此您仍然需要考虑错误

你可以考虑给每个保存的(上传的)文件一个唯一的名字,并在数据库中引用它们,在这种情况下你可以很可靠地使用。 至于实际保存文件,这里有很多选项:可以使用类公开的静态方法,也可以使用控件的方法(如果使用的话)。请说明你的情况


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

< P>您应该能够检查文件名是否已经存在,使用<代码> St.I..file。p>
if(System.IO.File.Exists("image1")){
  //Use a different name
}

当然,您需要改进此示例,使其更灵活地满足您的特定需求。

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

要在文件存在时操作路径字符串,请查看
System.IO.path
[]。这是一个非常有用的工具,可以满足您的需要。

您可以像

 if (System.IO.File.Exists("Path"))
    {
        fileUpload1.SaveAs("Path + New FileName");
    }
但是,如果保存文件时附加当前数据时间和文件名,效果会更好。e、 g

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

我已经成功地解决了这个问题,通过使用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;
}

来源:

当然,您可以使用
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);

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

您的问题是什么?你试过什么?“我需要将尽可能多的图像或文件添加到我的文件夹”是什么意思?如果文件名只是“图像”,我猜您希望第二个文件名为“图像”?如果文件夹中存在文件名“image1”,而另一个用户希望添加另一个名为“image1”的图像,则应将新图像保存为“image2”。