从目录中获取文件,不包括其他列表中的文件?

时间:2013-09-18 22:33:58

标签: c# winforms

我有这段代码:

private void CreateNewGif(string urlsdirs)
{
    List<string> files = Directory.GetFiles(urlsdirs, "RainImage*.*").ToList();
    List<string> files1 = Directory.GetFiles(urlsdirs, "SatelliteImage*.*").ToList();
}

个文件包含62个文件。 files1只包含9个文件。 我需要的文件将包含文件数减去第二个List的长度。

例如在文件中我有62个文件,例如:

index 0: file000001
index 1: file000002
.
.
.
index 61: file000062

文件包含其他文件,例如:

index 0: test000001
index 1: test000002
.
.
.
index 8: test000009

所以我需要List files1将包含file000001和file000002 ....但只有53个文件而不是原始的62个文件。

我需要以某种方式制作files1.length - files.length,而不是数学62 - 9,但也要删除files1列表中的前9个文件。

所以最后List file1只包含53个文件。 (62 - files.length

现在,如果我查看列表files1,我会看到它将从10开始到62.

2 个答案:

答案 0 :(得分:1)

也许是这样的:

var satelliteImages = Directory.GetFiles(urlsdirs, "SatelliteImage*.*");
var suffixes = satelliteImages.Select(s => s.Substring(14));
var hashSet = new HashSet(suffixes);
var rainImages = Directory.GetFiles(urlsdirs, "RainImage*.*");
var filteredImages = rainImages.Where(s => !hashSet.Contains(s.Substring(9)))
var files = filteredImages.ToList();

说明:

  1. 获取要排除的所有"SatelliteImage*.*"个文件的列表。
  2. 选择您感兴趣的文件名后缀
    (注意:s.Substring(14)因为"SatelliteImage".Length = 14"
  3. 将后缀转换为HashSet以便快速查找。
  4. 获取所有"RainImage*.*"个文件的列表。
  5. 过滤掉HashSet中出现后缀的项目 (注意:s.Substring(9)因为"RainImage".Length = 9"
  6. 最后,将结果转换为列表。
  7. 或者更简单一点:

    var hashSet = new HashSet(Directory.GetFiles(urlsdirs, "SatelliteImage*.*").Select(s => s.Substring(14)));
    var files = Directory.GetFiles(urlsdirs, "RainImage*.*").Where(s => !hashSet.Contains(s.Substring(9))).ToList();
    

答案 1 :(得分:1)

尝试

var result = files.OrderBy(x => x).Skip(files1.Count);