簡體   English   中英

從列表中刪除文件后,自動重命名filname無法正常工作

[英]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.

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