从目录中获取文件,但不包括其他列表中的文件
本文关键字:文件 不包括 其他 列表 获取 | 更新日期: 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();
解释:
- 获取要排除的所有
"SatelliteImage*.*"
文件的列表。 - 选择您感兴趣的
文件名的后缀(注:s.Substring(14)
因为"SatelliteImage".Length = 14"
) - 将后缀转换为
HashSet
以便快速查找。 - 获取所有
"RainImage*.*"
文件的列表。
筛选出具有显示在 - 缀的项目。
(注:s.Substring(9)
因为"RainImage".Length = 9"
) - 最后,将结果转换为列表。
HashSet
中的后或者更简短一点:
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);