Sam*_*ern 4 io haskell working-directory readfile
我有一个程序,读取和写入与可执行文件存在于同一目录中的文本文件.要访问该文件,我打电话readFile "./file.txt"
当我从它所在的目录中运行可执行文件时,这可以工作.但是,如果我cd到另一个目录并运行可执行文件(它在我的路径上),Haskell会尝试file.txt从我的终端中的工作目录中获取.如何让Haskell file.txt从可执行文件的位置访问,而不是我的工作目录.我不想硬编码绝对路径,因为我希望可执行文件在某种程度上是可移植的.
为什么不将文件存储在官方的应用程序目录中?那么当前目录是什么并不重要.(请参阅 getAppUserDataDirectory.)
System.Directory中还有其他有用的目录和方便的文件系统实用程序.它是跨平台的,因为它根据您的操作系统知道应该去哪里.
推理:
如果将工作数据存储在与可执行文件相同的目录中,则只有在该目录中具有写入权限的人才能正确运行您的程序.只有超级用户才能在目录中写入/usr/local/bin,只有管理员才能写入C:\Program Files\.使用User Application Directory,任何人都可以运行应用程序,因为应用程序数据目录特定于用户并且可由他们写入,因此这就是为什么这是一个好习惯.
就个人而言,我不喜欢应用程序使用配置数据来混淆我的主用户区域,但是确实需要应用程序,所以建议我的用户区域作为保存我自己的一些内容(getHomeDirectory)的第一个猜测.我建议用户应用程序数据目录,因为你建议了可执行文件的目录,所以它听起来像配置数据.
该功能按getExecutablePath您的要求执行。不幸的是,它只被添加到System.Environment刚刚发布的 GHC 7.6.1 中,还没有被整合到 Haskell 平台中。
编辑:具有此功能的较新的 Haskell 平台已经发布。