是否有一种与系统无关的方法来确定表示当前目录级别和父目录级别的字符串?

2024-04-14

C# 代码可以运行的不同环境对于文件和目录路径必须是什么样子有不同的约定/规则。

一个常见的示例是分隔目录级别的字符。 在 Windows 上,它是\,在Linux上,它是/,还有其他(也是未来的)系统可能遵循不同的规则。

因此,为了创建健壮的代码,建议始终使用Path.DirectorySeparatorChar https://learn.microsoft.com/de-de/dotnet/api/system.io.path.directoryseparatorchar?view=netframework-4.7.2(或者,当然,使用辅助方法,例如Path.Combine https://learn.microsoft.com/de-de/dotnet/api/system.io.path.combine?view=netframework-4.7.2)而不是硬编码特定的目录分隔符。

现在,在各种系统上,有一些“伪目录名称”可以在路径中使用:

  • .代表当前目录
  • ..代表父目录,即当前目录的上一级

虽然这些在 Windows 和 Linux 上恰好是相同的,但其他环境(可以实现 Mono 来运行)可能会遵循不同的语法。

我不想对这些伪目录名称进行硬编码。我如何在运行时检索它们?


我不认为这是一个问题。/适用于 Windows、Unix 和 Linux。同样适用于.. and .。它也是统一命名约定用于网络路径。

在 Mono 的实现中Path class .. and .是偶数硬编码的 https://github.com/mono/mono/blob/master/mcs/class/corlib/System.IO/Path.cs。如果底层框架甚至这样做的话,我认为避免硬编码没有任何意义。

Excerpt:

internal static void CheckSearchPattern(String searchPattern)
{
    int index;
    while ((index = searchPattern.IndexOf("..", StringComparison.Ordinal)) != -1) {

        if (index + 2 == searchPattern.Length) // Terminal ".." . Files names cannot end in ".."
            throw new ArgumentException(Environment.GetResourceString("Arg_InvalidSearchPattern"));

        if ((searchPattern[index+2] ==  DirectorySeparatorChar)
            || (searchPattern[index+2] == AltDirectorySeparatorChar))
            throw new ArgumentException(Environment.GetResourceString("Arg_InvalidSearchPattern"));

        searchPattern = searchPattern.Substring(index + 2);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有一种与系统无关的方法来确定表示当前目录级别和父目录级别的字符串? 的相关文章

随机推荐

  • 如何使用灵活的数组成员初始化结构

    我有以下结构 typedef struct person int age char sex char name person 我已经做了一些基本的互联网搜索 但不成功 了解如何创建实例并使用灵活的数组成员初始化结构而不使用malloc 例如
  • snmpwalk 与 PySNMP

    我想重现以下 SNMP 命令的行为 snmpwalk v2c cpublic 192 168 0 10 1 3 6 1 2 1 25 2 3 1 3 这给了我这个输出 iso 3 6 1 2 1 25 2 3 1 3 1 STRING Ph
  • 列出应用程序的活动和意图过滤器?

    我有兴趣激活另一个应用程序的活动 通过阅读 Android SDK 我知道最好以隐式意图执行此操作 但是 此活动并不驻留在我拥有的应用程序中 因此我不知道意图过滤器上的操作 类别和数据标志 如何检查 Android 应用程序元数据 例如活动
  • 将异步结果分配给数据绑定属性

    下面是一个示例实现 它使用 Metro API 和数据绑定 使用 MVVM 来填充下拉列表中的文件夹列表 View 模型的构造函数使用 SetFolders 方法 私有异步 该方法调用可等待方法 fileService GetFolders
  • Gulp-autoprefixer 抛出 ReferenceError: Promise 未定义

    我尝试让 gulp 编译我的 sass 然后使用 autoprefixitgulp autoprefixer但我收到错误 var gulp require gulp sass require gulp sass autoprefixer r
  • 清理 .NET 中动态 SQL 中的表/列名称? (防止SQL注入攻击)

    我正在生成一些动态 SQL 并希望确保我的代码是安全的SQL注入 http en wikipedia org wiki SQL injection 为了便于论证 这里是一个关于如何生成它的最小示例 var sql string Format
  • 乘以数据表中的列

    我有一个 C 数据表 其中包含 价格 列和 分配 列 我需要将价格列乘以分配列 并将结果放入价格列中 有没有一种方法可以在不循环桌子的情况下进行 我尝试过这样的事情 DataTable dt getData dt Columns Price
  • 函数输出函数文本而不是预期输出

    我已经用几种不同的方式提出了类似的问题 但这是最简单的版本 我试图在函数发生时通过键名值列表进行递增 但是 当调用该函数时 我得到的只是函数本身的文本 这是一个片段 var knlist kn10 2L1qvq6Tg6rMhEwNshr6d
  • 两个相互依赖的字段的淘汰验证

    考虑下面的代码 var MyObjectModel function myObject var self this self myNumber1 ko observable myObject number1 trimmed self myN
  • 从Azure功能(powershell)访问IP受限的URI

    我想知道给定的 Powershell 函数 例如 url http AnIPrestrictedURL xml xml new object System Net WebClient DownloadString url url 是一个 I
  • 如何在 JavaScript 中使用单选按钮将用户发送到新网站?

    我希望程序做的是制作一个表单并有 2 个单选按钮和 1 个文本 然后我希望它将文本和单选值折叠在一起并将我带到该页面 如果我输入类似 facebook 的文本 并且单选按钮值为 com 我希望它采用 facebook com 并将我发送到该
  • 升级到 razor 2 / mvc 4 后,为什么我的 razor 视图抱怨“}预期”?

    我有一个现有的 razor 1 mvc 3 视图 有一些嵌套if 非常简单 但是升级到 razor 2 mvc 4 后 它在运行时和编译时抱怨 BuildViews about expected 它曾经工作得很好 我已经检查了所有元素是否格
  • Flask 运行与 Python

    我很难使用 python 方法运行我的烧瓶应用程序 我使用没有问题 export FLASK APP microblog py flask run 但尝试使用 python microblog py 会导致以下错误 ImportError
  • 在代码块中链接头文件

    所以我在 OpenCV 中编写了代码 其中包含使用 Code Blocks 的 2 个头文件 当我编译文件时 除了两个 未定义的引用 错误之外没有任何错误 这是因为我使用了在头文件中声明的函数 我假设代码块自动链接头文件 我已经使用 inc
  • PIC18F 中的随机种子

    我将在 PIC18F2550 微控制器上运行修改后的 DES 代码 C 语言 为此 我使用 mplabx IDE v 2 和 Mplab xc8 v 1 30 要修改代码 我需要一个随机数 以便每次运行都会产生不同的数字 我想使用 rand
  • Geany编译

    不知道该把这个放在哪里 但我在 2 个系统 笔记本电脑和台式机 上运行 Geany 在我的笔记本电脑上它运行得很好 但在我的台式机上运行代码时出现此错误 whatevername 不被识别为内部或外部命令 可操作程序或批处理文件 我不知道w
  • 使用 Pandas 的欧几里得距离矩阵

    我有一个 csv 文件 其中包含以下格式的城市 纬度和经度数据 CITY LATITUDE LONGITUDE A 40 745392 73 978364 B 42 562786 114 460503 C 37 227928 77 4019
  • C++ pow 函数得到一个奇怪的结果[重复]

    这个问题在这里已经有答案了 使用某些版本的 minGW 以下代码将打印 99 int high high pow 10 2 std cout lt
  • String.IndexOf 方法的表达式树

    我应该如何构建表达式树string IndexOf substring StringComparison OrdinalIgnoreCase 我可以在没有第二个参数的情况下让它工作 StringComparison OrdinalIgnor
  • 是否有一种与系统无关的方法来确定表示当前目录级别和父目录级别的字符串?

    C 代码可以运行的不同环境对于文件和目录路径必须是什么样子有不同的约定 规则 一个常见的示例是分隔目录级别的字符 在 Windows 上 它是 在Linux上 它是 还有其他 也是未来的 系统可能遵循不同的规则 因此 为了创建健壮的代码 建