如果路径列表中的文件已经存在,如何删除路径列表中的路径

时间:2019-05-15 15:13:34

标签: c#

如果路径列表中的文件已经存在,如何删除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?

如您所见,两个文件在另一个目录中是相同的,但是由于我已经在路径列表中添加了第一行,因此我想跳过第二行,因为该文件已存在于路径列表中。

我该如何实现?

2 个答案:

答案 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();