首页 / 知识

.NET路径操作库

2023-04-14 16:59:00

.NET路径操作库

.NET path manipulation library

有人知道任何好的库可以很好地抽象出路径操作问题吗?我希望能够使用任意分隔符(例如'/'或':')组合和解析路径,而无需重新设计轮子。

System.IO.Path不可重用是很可惜的。

谢谢


检查Patrick的库以处理路径操作链接文本

这是Codeplex项目


System.IO.Path.Combine对于许多不同类型的路径都适用:

http://msdn.microsoft.com/en-us/library/system.io.path.combine.aspx

System.IO.Path.Combine使用当前的平台标准分隔符来组合路径。这意味着在Windows上它使用" ",在unix / linux(单声道)上它使用" /"。您能否提供一些示例,说明您要尝试结合的路径以及在哪个平台上进行的操作?


恐怕您必须像我一样自己实现一个路径类。它具有以下优点:

  • 您可以从类型安全中受益
  • 您可以覆盖运算符/,从而使连接更容易
  • 您可以添加便捷成员函数,例如GetParentPath()和GetLeafPart()

我无法根据分隔符告诉您可能正在使用的环境,但是我之前从未见过像这样的库。

因此,使用反射镜和System.IO.Path作为基础,重新设计轮子并不难。

  • 创建此类的实例
  • 在CTor中提供分隔符
  • 如果需要,可以选择更改InvalidPathChars

这几乎是框架使用的代码,因此应该一样快,或者差异可以忽略不计。可能快于RegEx或可能不快于RegEx,但这可能值得一试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class ArbitraryPath
{
    private readonly char _directorySeparatorChar;
    private readonly char _altDirectorySeparatorChar;
    private readonly char _volumeSeparatorChar;

    public ArbitraryPath(char directorySeparatorChar, char altDirectorySeparatorChar, char volumeSeparatorChar)
    {
        _directorySeparatorChar = directorySeparatorChar;
        _altDirectorySeparatorChar = altDirectorySeparatorChar;
        _volumeSeparatorChar = volumeSeparatorChar;
    }

    public string Combine(string path1, string path2)
    {
        if ((path1 == null) || (path2 == null))
        {
            throw new ArgumentNullException((path1 == null) ?"path1" :"path2");
        }
        CheckInvalidPathChars(path1);
        CheckInvalidPathChars(path2);
        if (path2.Length == 0)
        {
            return path1;
        }
        if (path1.Length == 0)
        {
            return path2;
        }
        if (IsPathRooted(path2))
        {
            return path2;
        }

        char ch = path1[path1.Length - 1];
        if (ch != _directorySeparatorChar && ch != _altDirectorySeparatorChar && ch != _volumeSeparatorChar)
        {
            return (path1 + _directorySeparatorChar + path2);
        }
        return (path1 + path2);
    }

    public bool IsPathRooted(string path)
    {
        if (path != null)
        {
            CheckInvalidPathChars(path);
            int length = path.Length;
            if (length >= 1 && (path[0] == _directorySeparatorChar || path[0] == _altDirectorySeparatorChar) || length >= 2 && path[1] == _volumeSeparatorChar)
            {
                return true;
            }
        }
        return false;
    }

    internal static void CheckInvalidPathChars(string path)
    {
        for (int i = 0; i < path.Length; i++)
        {
            int num2 = path[i];
            if (num2 == 0x22 || num2 == 60 || num2 == 0x3e || num2 == 0x7c || num2 < 0x20)
            {
                throw new ArgumentException("Argument_InvalidPathChars");
            }
        }
    }

}

您正在描述正则表达式!将其用作您需要做的事情的基础。


操作路径抽象检查

最新内容

相关内容

猜你喜欢