获取不同的文件路径

本文关键字:文件 路径 获取 | 更新日期: 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);