【问题标题】:Haskell - How to get the system OS directory?Haskell - 如何获取系统操作系统目录?
【发布时间】:2015-08-19 20:22:48
【问题描述】:

directory 库包含许多帮助方法,用于获取某些保留目录。但是,截至最新版本(1.2.3.1),似乎没有可以获取系统OS目录的功能;例如,“C:\Windows”。我希望这是一个类似getSystemDirectory 的函数,但我没有看到任何等效函数。至少在 Windows 上,用户可以将操作系统安装到非标准位置,因此,对其位置做出任何假设是不安全的。

是否有另一个库可以公开这样的函数?

【问题讨论】:

  • 这对非 Windows 系统意味着什么?我使用 Linux,如果你问我的“系统操作系统目录”在哪里,我不知道如何回答。 (话说回来,我不是专家!)
  • 是的,我也不完全确定。我从来没有尝试过在 Linux 中脱离用户空间。 (也许这相当于root 的主目录?) [编辑:] 实际上,我认为/boot 是等价的。基本上,它就是内核所在的地方。
  • 由于“操作系统目录”是一个特定于 Windows 的概念,因此请寻找专用于 Windows 编程的库。无论如何,对于不是非常特定于操作系统的“操作系统目录”,您无法做任何有用的事情。在 Windows 中,我希望您可以通过环境变量(可移植概念)或注册表项(特定于 Windows 的概念)获取信息。
  • Gilles,关于图书馆有什么建议吗?这就是我一直在寻找的东西,但什么也找不到。我特别尝试避免输入它,因为它是一个可以自动执行某些类型的文件更改的工具。我宁愿以更正确的方式(库支持)来做,而不是破解它。最坏的情况,我想我可以使用包装 kernel32 的库。
  • @stormont:我会考虑让用户指定他们确实希望您的工具监控的目录,而不是避免使用某些目录,并远离任何地方否则。

标签: haskell


【解决方案1】:

Win32 库包含此功能。

import System.Win32.Info

-- Calls Win32's GetWindowsDirectory() function in kernel32.dll
-- Corresponds to: C:\Windows
getWindowsDirectory :: IO String

-- Calls Win32's GetSystemDirectory() function in kernel32.dll
-- Corresponds to: C:\Windows\system32   
getSystemDirectory :: IO String

【讨论】:

  • 令人讨厌的是,搜索这些并没有出现在 Hoogle 或 Stackage 中(在我发布这个问题时)。
  • haskell.org/hoogle/?hoogle=%2Bwin32+getSystemDirectory hoogle 默认搜索一小部分包。 Google 中曾经有(有?)特定于操作系统的标志。
  • 是的,我知道这一点,但我确实认为 Stackage 更加一致。最终,我通过查找 MSDN 中的 Win32 方法并通过 Google 搜索类似名称找到了我需要的东西。 (当然,尝试“Windows 目录”对结果没有多大帮助,但“Win32”更有效。)Hoogle 缺少的关键是知道要从 Win32 库开始。
【解决方案2】:

找到操作系统特定操作的正确方法是告诉 hoogle 您在谈论哪个操作系统。希望在寻找特定于操作系统的东西时很明显。在这种情况下,您可以通过简单的os:windows system directory 获得成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 2022-06-20
    • 1970-01-01
    • 2013-11-11
    • 2011-09-02
    • 2010-10-08
    • 2021-05-15
    • 2012-04-18
    相关资源
    最近更新 更多