我正在编写必须在 windows 和 linux 上 运行(在单声道下)的 C# 代码。处理两者文件路径的简单方法?
I'm writing C# code that has to run on windows and linux (under mono). Easy way to handle file paths on both?
我正在为 Kerbal Space 编写一个 mod 程序,该程序将数据记录到文本文件中以供外部工具(matlab 等)使用。 KSP 适用于 Linux 和 Windows,我希望我的 mod 在两者上都能发挥出色。我有点希望 linux 上的单声道实现会做一些聪明的事情并将 \'s 转换为 /'s,特别是因为我只是以 Directory.GetCurrentDirectory 作为我的基础,所以我不必担心 detecting/specifying 诸如 c:\ 与 / 之类的事情。
一个可接受的答案(至少现在)将是确定我 运行 在哪个平台上并以不同方式生成字符串的好方法(使用我可以设置的分隔符 char 变量而不是斜杠字符串文字)。不过,我可以自己查一下,我有点希望有一个巧妙的解决方案。我在这里尝试 Googling/searching,但没有什么特别突出的地方。
使用Path.PathSeparator
。 \
在 Windows 上,/
在 Unix 上。
如果您要组合目录名称,可以使用 Path.Combine
。
要获取根目录(即/
或C:\
,您可以使用Path.GetPathRoot(Directory.GetCurrentDirectory())
)。
Path docs 中的更多信息。
Mono 为 IOMap to convert pathnames, so you can use backslashes happily in your code and then use MONO_IOMAP=all mono something.exe
to start your program. Mono has a page 提供有关应用程序可移植性的建议。
尽可能多地使用 System.Path.*。它将避免您必须执行特定的 OS 检查来确定临时目录、应用程序位置、data/Desktop/Doc 位置...
并使用 Path.Combine 并避免必须使用路径分隔符。如果您使用 Path.PathSeparator 手动解析和构建路径,请问您为什么?很可能有一个 std 框架方法可以满足您的需求。吻 ;-)
我正在为 Kerbal Space 编写一个 mod 程序,该程序将数据记录到文本文件中以供外部工具(matlab 等)使用。 KSP 适用于 Linux 和 Windows,我希望我的 mod 在两者上都能发挥出色。我有点希望 linux 上的单声道实现会做一些聪明的事情并将 \'s 转换为 /'s,特别是因为我只是以 Directory.GetCurrentDirectory 作为我的基础,所以我不必担心 detecting/specifying 诸如 c:\ 与 / 之类的事情。
一个可接受的答案(至少现在)将是确定我 运行 在哪个平台上并以不同方式生成字符串的好方法(使用我可以设置的分隔符 char 变量而不是斜杠字符串文字)。不过,我可以自己查一下,我有点希望有一个巧妙的解决方案。我在这里尝试 Googling/searching,但没有什么特别突出的地方。
使用Path.PathSeparator
。 \
在 Windows 上,/
在 Unix 上。
如果您要组合目录名称,可以使用 Path.Combine
。
要获取根目录(即/
或C:\
,您可以使用Path.GetPathRoot(Directory.GetCurrentDirectory())
)。
Path docs 中的更多信息。
Mono 为 IOMap to convert pathnames, so you can use backslashes happily in your code and then use MONO_IOMAP=all mono something.exe
to start your program. Mono has a page 提供有关应用程序可移植性的建议。
尽可能多地使用 System.Path.*。它将避免您必须执行特定的 OS 检查来确定临时目录、应用程序位置、data/Desktop/Doc 位置...
并使用 Path.Combine 并避免必须使用路径分隔符。如果您使用 Path.PathSeparator 手动解析和构建路径,请问您为什么?很可能有一个 std 框架方法可以满足您的需求。吻 ;-)