如果路径列表中的文件已经存在,如何删除pathList中的路径?
我有一个List路径,其中包含一些文件的许多字符串路径。 我想知道的是,如果该文件在另一个目录路径中重复出现,该如何删除路径列表中的路径?
例如:
/directory/data/testing/testdata.csv
/directory/data/test123/testdata.csv
/directory/data/test123/testdata3.csv?
/directory/data/testing/testdata1.csv?
/directory/data/test123/testdata2.csv?
如您所见,两个文件在另一个目录中是相同的,但是由于我已经在路径列表中添加了第一行,因此我想跳过第二行,因为该文件已存在于路径列表中。
我该如何实现?
答案 0 :(得分:1)
您可以使用Path.GetFileName对列表进行分组,然后在GroupB返回的每个组上仅选择列表中的第一项
List<string> paths = new List<string>
{
"/directory/data/testing/testdata.csv",
"/directory/data/test123/testdata.csv",
"/directory/data/test123/testdata3.csv",
"/directory/data/otherfolder/testdata3.csv",
"/directory/data/testing/testdata1.csv",
"/directory/data/testdata1.csv",
"/directory/data/test123/testdata2.csv"
"/directory/data/myfolder/testdata2.csv"
};
paths = paths.GroupBy(p => Path.GetFileName(p))
.Select(x => x.First()).ToList();
foreach(string s in paths)
Console.WriteLine(s);
输出为:
/directory/data/testing/testdata.csv
/directory/data/test123/testdata3.csv
/directory/data/testing/testdata1.csv
/directory/data/test123/testdata2.csv
答案 1 :(得分:0)
尝试下一个代码:
//lspath is the list with all paths
var dataDistinc = lspath.Select(x =>
{
//get all files with .csv
if (Regex.IsMatch(x.Split('/').Last(), ".csv") || Regex.IsMatch(x.Split('/').Last(), ".csv?"))
{
var buff = x.Split('/').Last();
//get the path files with the same files
var z = lspath.Select(y => {
if(y.Contains(buff)){
return y;
}
return null;
}).Where(i => i != null).FirstOrDefault();
//return the first
return z;
//return z.Select(j => j != null ? j : null);
};
return null;
}).Distinct();