如果这是一个简单的问题,我道歉。 我已经指定了一个输入文件,该文件位于代码源文件的同一目录中。
isprime :: Int -> [Int] -> Bool
isprime ...
main = do
handle <- openFile "primes-to-100k.txt" ReadMode
contents <- hGetContents handle
i <- getLine
print $ isprime (read i::Int) $ map (\x->read x::Int) $ lines contents
hClose handle
当我在shell中使用“runhaskell Q111.hs”时代码运行良好, 但当我用“ghc --make Q111.hs编译并运行时,我收到了一条错误消息
Q111:primes-to-100k.txt:openFile:不存在(没有这样的文件或目录) 注销
重点是代码与ghci和runhaskell运行良好,但是可执行文件找不到输入txt。
我是否必须使用某种方式向编译器提供输入txt?
答案 0 :(得分:3)
尝试curdDir <- getCurrentDirectory
和paths <- getDirectoryContents
并检查路径。如果它包含文件名,则路径是正确的(并尝试使用contents <-readFile "file"
用于更简单的程序,但这不是必需的。)
编辑:
...并使用isexist <- doesFileExist "f"
来检查是否存在。
答案 1 :(得分:3)
你是如何运行可执行文件的?文本文件必须位于运行程序的目录中,该程序可能是也可能不是程序的位置。如果从命令行运行./Q111
,或者双击Windows中的Q111.exe
,则文本文件必须与可执行文件位于同一文件夹中。如果您位于命令行的不同目录中,则文本文件必须位于当前目录所在的位置,而不是可执行文件所在的目录。
FindBin
包,他们会提到:
main = do
exedir <- getProgPath
handle <- openFile (exedir ++ "/primes-to-100k.txt") ReadMode
...