是否可以在 C# 中覆盖 IO 类 的系统目录分隔符?
Is it possible to override system directory separator character for IO classes in C#?
我在 Unity 3D 中进行开发,有时会编写编辑器工具。有时我会遇到目录分隔符的问题。 Unity API 始终使用“/”来请求 AssetDatabase 路径。但是 IO 类 例如文件、目录或路径使用系统分隔符,所以它在 Windows 上是 '\',在 macOS 上是 '/'。即使在 Windows 上也可以让他们默认使用 '/' 吗?也许有一些我可以在运行时初始化阶段初始化的文件?每次都用'/'替换'\'来统一API调用很烦人。我的代码现在看起来像这样,我认为它很难看:
foreach (var prefabPath in prefabPaths)
{
#if UNITY_EDITOR_WIN
prefabPath = prefabPath.Replace('\', '/');
#endif
.............
}
不幸的是,这是添加逻辑最少的最佳方法。我可以帮你补一下。
//using System;
//using System.IO;
foreach (string _preFabPath in PreFabPaths)
{
#if UNITY_EDITOR_WIN
_preFabPath = _preFabPath.Replace(Path.DirectorySeparatorChar, '/');
#endif
}
- DirectorySeparatorChar 将使用您所在系统的本地路径分隔符。
- 下划线封装的私有变量将有助于将 preFabPath 识别为 ForEach 封装变量。
我在 Unity 3D 中进行开发,有时会编写编辑器工具。有时我会遇到目录分隔符的问题。 Unity API 始终使用“/”来请求 AssetDatabase 路径。但是 IO 类 例如文件、目录或路径使用系统分隔符,所以它在 Windows 上是 '\',在 macOS 上是 '/'。即使在 Windows 上也可以让他们默认使用 '/' 吗?也许有一些我可以在运行时初始化阶段初始化的文件?每次都用'/'替换'\'来统一API调用很烦人。我的代码现在看起来像这样,我认为它很难看:
foreach (var prefabPath in prefabPaths)
{
#if UNITY_EDITOR_WIN
prefabPath = prefabPath.Replace('\', '/');
#endif
.............
}
不幸的是,这是添加逻辑最少的最佳方法。我可以帮你补一下。
//using System;
//using System.IO;
foreach (string _preFabPath in PreFabPaths)
{
#if UNITY_EDITOR_WIN
_preFabPath = _preFabPath.Replace(Path.DirectorySeparatorChar, '/');
#endif
}
- DirectorySeparatorChar 将使用您所在系统的本地路径分隔符。
- 下划线封装的私有变量将有助于将 preFabPath 识别为 ForEach 封装变量。