比较标题上的项目,如果它存在,我想添加一个新的文件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等。我该怎么做呢?
检查下面的代码。我已经把它放在。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)