我想找到,给一条路,有相同的文件名,但不同的扩展名的文件的列表 ( .bak
和 .dwg
) 相同的目录中。
我有此代码︰
String[] FileNames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".bak") || s.EndsWith(".dwg")).ToArray();
var queryDupNames = from f in FileNames
group f by Path.GetFileNameWithoutExtension(f) into g
where g.Count() > 1
select new { Name = g.Key, FileNames = g };
这工作很高兴找到具有相同文件名,但在整个系统中的文件。我只需要获取那些相同的目录中。
例如︰
- Dir1\filename1.bak
- Dir1\filename1.dwg
- Dir1\filename2.bak
- Dir1\filename2.dwg
- Dir1\filename3.dwg
- DiferentDir\filename1.bak
- DiferentDir\filename1.dwg
- DiferentDir\filename3.dwg
结果应该是︰
- Dir1\filename1.bak
- Dir1\filename1.dwg
- Dir1\filename2.bak
- Dir1\filename2.dwg
- DiferentDir\filename1.bak
- DiferentDir\filename1.dwg
但与我的代码,filename3 还包括由于
g.count() > 1
是真的。它按只有文件名进行分组...我试着修复这段代码却 0 结果︰
String[] FileNames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".bak") || s.EndsWith(".dwg")).ToArray();
var queryDupNames = from f in FileNames
group f by new { path = Path.GetLongPath(f), filen = Path.GetFileNameWithoutExtension(f) } into g
where g.Count() > 1
select new { Name = g.Key, FileNames = g };
任何帮助或线索吗?
谢谢你
System.IO.Path不会有一个 GetLongPath 方法。我怀疑你利用像 AlphaFS 的外部库。在任何情况下, GetLongPath
返回的完整文件路径,而不是该文件的文件夹的路径。
该文件的文件夹路径经由 GetDirectoryName
System.IO 和其他库中的两个都喜欢 AlphaFS。下面的代码段将只返回 Dir1\filename1
, Dir1\filename2
和DifferentDir\filename1
var files = new[]
{
@"c:\Dir1\filename1.bak",
@"c:\Dir1\filename1.dwg",
@"c:\Dir1\filename2.bak",
@"c:\Dir1\filename2.dwg",
@"c:\Dir1\filename3.dwg",
@"c:\DiferentDir\filename1.bak",
@"c:\DiferentDir\filename1.dwg",
@"c:\DiferentDir\filename3.dwg",
};
var duplicates = from file in files
group file by new
{
Folder = Path.GetDirectoryName(file),
Name = Path.GetFileNameWithoutExtension(file)
} into g
where g.Count()>1
select new
{
Name = g.Key,
Files = g.ToArray()
};