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

本文关键字:文件 不包括 其他 列表 获取 | 更新日期: 2023-09-27 18:32:05

我有这个代码:

private void CreateNewGif(string urlsdirs)
{
    List<string> files = Directory.GetFiles(urlsdirs, "RainImage*.*").ToList();
    List<string> files1 = Directory.GetFiles(urlsdirs, "SatelliteImage*.*").ToList();
}
文件包含 62 个文件。文件

1 仅包含 9 个文件。我需要文件将包含文件数减去第二个列表的长度。

例如,

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

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

包含另一个文件,例如:

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

所以我需要列表文件1将包含文件000001和文件000002....但只有 53 个文件,而不是原始的 62 个文件。

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

因此,最终列表文件1将仅包含53个文件。( 62 - files.length

所以现在,如果我files1看一下列表,我会看到它将从 10 到 62 开始。

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

也许是这样的:

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中的后
  6. 缀的项目。
    (注:s.Substring(9)因为"RainImage".Length = 9"
  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();

尝试

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