2012-02-16 40 views
1

我無法將數據文件打包到cabal dist中。在安裝軟件包後,使用getDataFileName生成的目錄不存在。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 
+1

在.cabal文件中,請勿使用絕對路徑。所有的數據文件都應該位於軟件包目錄下,並由相對路徑引用。 – 2012-02-16 14:29:37

+0

啊,我應該提到,cabal文件是由Leksah生成的。我會將其添加到帖子中(並且我會嘗試手動編輯它以查看它是否以這種方式工作)。 – 2012-02-16 14:30:45

+0

沒有沒有幫助。目錄'〜/ .cabal/share/mypackage-0.0.1 /'仍然不存在。 – 2012-02-16 14:34:43

回答

2

在線條。 cabal文件應該是

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

然後cabal會將數據文件安裝在適當的位置,/Users/peter/.cabal/share/mypackage-0.0.1/mydata.txt在你的情況下,程序將工作。

+0

值得注意的是,我不喜歡分配空數據文件作爲佔位符,所以我做的是使用'getDataDir'和['createDirectoryIfMissing'](http://hackage.haskell.org/packages/archive /directory/latest/doc/html/System-Directory.html#v:createDirectoryIfMissing) (。 – 2012-02-17 01:00:42