簡體   English   中英

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

[英]File name change if exists in a folder in C#

在我的應用程序中,我需要將文件(圖像,pdf,txt)保存到文件夾中。 我需要將盡可能多的圖像或文件添加到我的文件夾中。 假設我有一個名稱為“image1”的圖像,如果該圖像已存在於文件夾中,並且如果另一個用戶嘗試添加另一個名稱為“image1”的圖像,那么我的應用程序自動需要將圖像名稱更改為“image2”。 所以應用程序應該檢查文件是否存在,如果存在,用不同的名稱保存新圖像。 任何幫助將不勝感激。

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

但是,必須注意,沖突仍然可能發生。 例如,存在競爭條件,即文件可能在調用確定存在之后被其他人保存,但您調用創建文件之前,因此您仍然需要考慮錯誤。

您可能會考慮為每個保存的(上傳的?)文件指定一個唯一的名稱,並在數據庫中引用它們——在這種情況下,您可以非常可靠地使用Guid.NewGuid

至於實際保存文件,您有很多選擇:您可以使用FileStream 、 static File class 公開的方法,或者如果您正在使用FileUpload控件的方法。 請說明你的情況。

最后,取決於那里的大小,並且如果無論如何都在使用數據庫,您可能需要考慮將它們作為二進制數據存儲在那里,那么名稱沖突可能是無關緊要的。

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

這將 append 和 integer 放在文件名的末尾,直到找到不重復的文件名。

您應該能夠使用System.IO.File.Exists來檢查文件名是否已經存在...

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

當然,您需要改進此示例以更靈活地滿足您的特定需求。

你可以這樣做...

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

但是,如果您保存文件並在文件名中附加 Current DataTime 會更好。 例如

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

您可以使用System.IO.File.Exists [ MSDN ]方法檢查文件是否存在。 它接受一個路徑字符串作為它的參數。

要在文件存在時操作路徑字符串,請查看System.IO.Path [ MSDN ] 這是一個很好的實用程序,可以滿足您的需要。

我已經通過使用 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM