[英]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";
我已經通過使用 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.