2012-02-16 19 views
1

データファイルをカバールdistにパッケージ化することはできません。 getDataFileNameで生成されたディレクトリは、パッケージのインストール後に存在しません。getDataFileNameは存在しないディレクトリを返します

Main.hs:(ファイルを閲覧した後Leksahによって生成された)mypackage.cabal

module Main (
    main 
) where 

import Paths_mypackage 

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

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ファイルでは絶対パスを使用しないでください。すべてのデータファイルはパッケージディレクトリの下にあり、相対パスで参照される必要があります。 –

+0

ああ私が言及すべきである、キャバルファイルは、Leksahによって生成されます。私はそれを投稿に追加します(それを手動で編集して、そのように動作するかどうかを確認します)。 –

+0

それは役に立たなかった。ディレクトリ '〜/ .cabal/share/mypackage-0.0.1 /'はまだ存在しません。 –

答えて

2

内の行。キャバルファイルは

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) (。 –

関連する問題