-1

我有这个代码:

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

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

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

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

files 包含另一个文件,例如:

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 开始。

4

2 回答 2

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. 最后,将结果变成一个列表。

或者让它更简短一点:

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();
于 2013-09-18T22:37:54.063 回答
1

尝试

var result = files.OrderBy(x => x).Skip(files1.Count);
于 2013-09-18T23:06:24.310 回答