【问题标题】:How do I check the OS in the F# preprocessor?如何检查 F# 预处理器中的操作系统?
【发布时间】:2020-01-09 13:52:09
【问题描述】:

我们是多人在同一个 F# 项目上工作。一些将 MacOS 和 Visual Studio Code 与 Ionide 一起使用,而另一些则将 Windows 与 Visual Studio 一起使用。在 F# 代码中,我们需要访问一些文件,但 MacOS 使用 / 指定路径,而 Windows 使用 \。在 F# 中,我们怎样才能做出这样的事情:

#if OS_WINDOWS
    let path = "path\to\file.txt"
#elif OS_MAC
    let path = "path/to/file.txt"
#endif

【问题讨论】:

  • 大多数时候,使用 '/' 访问路径应该可以在 Windows 上正常工作。
  • 不太正确。至于路径分隔符,请阅读Path.AltDirectorySeparatorChar 的文档。您可以在任何地方使用正斜杠。
  • 记得使用@"path\to\file.txt""path\\to\\file.txt""""path\to\file.txt"""。但话又说回来,您将使用正斜杠。

标签: f# operating-system ionide


【解决方案1】:

没有内置的预定义符号来指示您正在编译的操作系统。当您使用 .NET 时,您通常在所有操作系统上使用相同的编译程序集,因此无论如何这不是您可以在预处理器中合理执行的操作。

您可以使用System.Environment 在运行时检查您正在运行的操作系统:

open System

let path = 
  if Environment.OSVersion.Platform = PlatformID.Win32NT then @"path\to\file.txt"
  else @"path/to/file.txt"

也就是说,如果您唯一关心的是路径中的斜杠和反斜杠,您可以使用:

let path = System.IO.Path.Combine("path", "to", "file.txt")

【讨论】:

  • 是的。处理路径时始终使用Path.Combine
猜你喜欢
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多