[英]Automatic rename filname not working fine after delete a file from list
我正在將文件名保存在數據庫中。 保存之前,我正在檢查文件名是否已存在於數據庫中。 如果是這樣,我想在文件名后附加一個唯一ID,例如,在文件名后附加(1)或(2),依此類推。
一切正常,但是當我從檢索到的列表和數據庫中刪除文件時,有時會得到重復的文件名。 我的代碼是:
var count = dbitems().Count(x.Name == name || x.Name.Contains(name + "("));
if (count > 0)
{
name = name + string.Format("({0})", count);
}
假設我保存了4個文件,名稱
(1) File
(2) File(1)
(3) File(2)
(4) File(3)
從這個列表中,我刪除了File(2)。 當我嘗試保存名稱為“ File”的文件時,我的輸出為File(3),但是該文件已經存在。 所需的輸出應該是“ File(2)”(因為已刪除(2),並且可以分配此名稱)或“ File(4)”。 我也嘗試過用count + 1,但這也造成了問題。
簡而言之,我希望像Windows Explorer這樣的行為創建自動分配唯一后綴的新名稱。
您必須循環執行:
string origName = name;
int version = 0;
while(dbitems().Count(x.Name == name) > 0)
{
name = origName + string.Format("({0})", ++version);
}
這將嘗試name,name(1),name(2),...,直到找到可用的“插槽”為止。 如果
名稱,名稱(1),名稱(5),名稱(6)
已經存在
謝謝大家的幫助。 謝謝大家 這是我實現的解決方案。
public string UniqueName(string name, int parentId)
{
var files = allFiles.Where(x => x.ParentId == parentId).ToList();
var newName = name;
if (files.Count() > 0)
{
for (var i = 1; i <= matches; i++)
{
if (files.Any(x => x.Name == newName
newName = string.Format("{0}({1})", name, i);
else
return newName
}
}
return newName
}
您將需要檢查每個候選人的姓名,所以也許更像是:
int count = 0;
string baseName = name;
while (dbitems().Any(x.Name == name))
{
count++;
name = string.Format("{1} ({0})", count, baseName);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.