比较标题上的项目,如果它存在,我想添加一个新的文件eg.最后是V2

本文关键字:一个 文件 eg V2 最后 添加 如果 项目 标题 存在 比较 | 更新日期: 2023-09-27 18:15:23

我正在检查文件夹中是否存在列表项:

 SPFolder folder = site.RootWeb.GetFolder(folderUrl);
                    if (folder.ItemCount > 0)
                    {
                        SPQuery query = new SPQuery();
                        query.Folder = folder;
                        SPListItemCollection listitem = list.GetItems(query); 
                        foreach (SPListItem item in listitem)
                        {
                           if (item.Title.Equals("ItemTitle")) {
                              // Add a new item with Title: ItemTitle_v2
                           }
                        }
                    }

如果条目存在,我首先检查标题是否为eg。"ItemTitle"。如果是,我在末尾添加一个带有"_v2"的新项目:"ItemTitle_v2"。但我还想检查是否存在_v2,3,4,5,6等。我该怎么做呢?

比较标题上的项目,如果它存在,我想添加一个新的文件eg.最后是V2

检查下面的代码。我已经把它放在。net Fiddle上,这样你就可以执行和验证了。我没有使用SP类,但逻辑在任何情况下都是常见的。

https://dotnetfiddle.net/hf85Jo。

public static void Main()
{
    var source = new List<ListItem>();
    source.Add(new ListItem { Title = "ItemTitle" });
    source.Add(new ListItem { Title = "ItemTitle_v2" });
    source.Add(new ListItem { Title = "ItemTitle_v3" });
    source.Add(new ListItem { Title = "OtherTitle" });
    var target = new List<ListItem>();
    target.AddRange(source); // Do not assign source directly, that will cause error.
    foreach(var item in source)
    {
        if(item.Title == "ItemTitle")
        {
            var newTitle = GetItemTitle(target, "ItemTitle");
            target.Add(new ListItem { Title = newTitle });
        }
    }
}
private static string GetItemTitle(IList<ListItem> destList, string titleToCheck)
{
    int verNum;
    // Get the last added item with matching title
    var match = destList.Last(s => s.Title.StartsWith(titleToCheck));
    // Check if there are items with versioned title
    if(match.Title.ToLower().Contains("_v"))
    {
        // Get the version string
        string verStr = match.Title.Split('_')[1];
        // Get the version number
        string verNo = verStr.ToLower().Replace("v", string.Empty);
        if(int.TryParse(verNo, out verNum))
        {
            verNum++;
        }
    }
    else
    {
        verNum = 2;
    }
    return string.Format("{0}_v{1}", titleToCheck, verNum);
}

解决方法:

private string AppendFileNumberIfExists(SPWeb rootWeb, SPFolder folder, string file)
    {
        if (rootWeb.GetFile(file).Exists) 
        {
            string fileName = Path.GetFileNameWithoutExtension(file); // The file name with no extension. 
            int fileVersionNumber = 0;
            do
            {
                var version = "_v";
                fileVersionNumber += 1;
                file = SPUrlUtility.CombineUrl(folder.Url, 
                            string.Format("{0}{1}{2}{3}", 
                                            fileName,
                                            version,
                                            fileVersionNumber,
                                            ".csv" ));       
            }
            while (rootWeb.GetFile(file).Exists); // As long as the file name exists, keep looping. 
        }
        return file;
 }

(灵感来自:http://www.donationcoder.com/forum/index.php?topic=38536.0)