【问题标题】:getDataFileName returns a non-existent directorygetDataFileName 返回一个不存在的目录
【发布时间】:2012-02-16 14:23:19
【问题描述】:

我无法将数据文件打包到 cabal dist 中。 getDataFileName生成的目录在安装包后不存在。

Main.hs:

module Main (
    main
) where

import Paths_mypackage

main = do file <- getDataFileName "mydata.txt"
          putStrLn file
          print =<< readFile file

mypackage.cabal(由 Leksah 在浏览文件后生成):

 data-files: /Users/peter/Documents/haskell/mypackage/data/mydata.txt
 mydata-dir: ""

输出:

mypackage: /Users/peter/.cabal/share/mypackage-0.0.1/mydata.txt: openFile: does not exist (No such file or directory)
/Users/peter/.cabal/share/mypackage-0.0.1/mydata.txt

【问题讨论】:

  • 在 .cabal 文件中,不要使用绝对路径。所有数据文件都应该在包目录下,并由相对路径引用。
  • 啊,我应该提到,cabal 文件是由 Leksah 生成的。我会将它添加到帖子中(我会尝试手动编辑它以查看它是否可以这样工作)。
  • 不,这没有帮助。目录~/.cabal/share/mypackage-0.0.1/ 仍然不存在。
  • 好的,知道了!我必须使用相对于 cabal 文件的路径,并使用完整的相对路径来访问它(这应该很明显)。

标签: haskell file-io cabal leksah


【解决方案1】:

.cabal 文件中的行应该是

data-files: mydata.txt
data-dir:   data

然后 cabal 会将数据文件安装在适当的位置,在您的情况下为 /Users/peter/.cabal/share/mypackage-0.0.1/mydata.txt,程序将运行。

【讨论】:

  • 值得注意的是,我不喜欢将空数据文件作为占位符分发,所以我要做的是使用getDataDircreateDirectoryIfMissing (.
猜你喜欢
  • 2023-02-04
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多