获取不同的文件路径
本文关键字:文件 路径 获取 | 更新日期: 2023-09-27 17:53:54
例如,我的文件夹结构如下:
驱动器C:
|——全球
| - - -文件夹
|------|---- FileA.dll
|------|---- FileB.dll
|------|---- FileA_1.dll
|——CodeFolder
|------|---- FildeCode.dll
|------|---- FildeCode_1.dll
|——ContentFolder
|------|---- ScriptsFolder
|------|-------- FileScripts.dll
|------|-------- FileScriptsA.dll
|------|-------- FileScripts_1.dll
我想获得列表文件路径,但每个文件都是唯一且不同的:
这里的结果(这里的顺序被忽略):
全球'文件夹C: ' ' FileA_1.dll
全球'文件夹C: ' ' FileB.dll
全球C: ' ' CodeFolder ' FileCode_1.dll
全球C: ' ' ContentFolder ' ScriptFolder ' FileScriptsA.dll
全球C: ' ' ContentFolder ' ScriptFolder ' FileScripts_1.dll
如何使用c# ?
您将需要对文件名排序进行自然排序,因此可以导入StrCmpLogicalW函数。你必须为你的项目启用不安全代码。
internal sealed class NaturalStringComparer : IComparer<string>
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
public static extern int StrCmpLogicalW(string psz1, string psz2);
public static readonly NaturalStringComparer Default = new NaturalStringComparer();
public int Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
}
然后您可以使用以下代码获得文件列表。
string[] filePathList = Directory.GetFiles(@"C:'Global'", "*.dll", SearchOption.AllDirectories)
.Select(path => new
{
Path = path,
Name = Path.GetFileName(path),
TruncatedName = Regex.Replace(Path.GetFileName(path), @"(_'d+)+(?='.dll$)", string.Empty)
})
.GroupBy(file => file.TruncatedName)
.Select(group => group.OrderByDescending(file => file.Name, NaturalStringComparer.Default).First().Path)
.ToArray();
你为什么不这样做(或者我在这里遗漏了什么)
string[] directories = Directory.GetFiles("directoryPath", "*.*", SearchOption.AllDirectories);