如果这是一个简单的问题,我深表歉意。我已经指定了一个输入文件,该文件位于代码源文件的同一目录中。
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
Run Code Online (Sandbox Code Playgroud)
当我在 shell 中使用“runhaskell Q111.hs”时,代码运行良好,但是当我使用“ghc --make Q111.hs”编译并运行时,出现错误消息
Q111: primes-to-100k.txt: openFile: 不存在(没有这样的文件或目录) 注销
关键是代码在 ghci 和 runhaskell 上运行良好,但可执行文件找不到输入 txt。
我是否必须使用某种方式向编译器提供输入 txt?
您如何运行可执行文件?该文本文件必须位于运行程序的目录中,该目录可能是也可能不是程序所在的位置。如果从命令行运行./Q111,或者在 Windows 中双击Q111.exe,则文本文件必须与可执行文件位于同一文件夹中。如果您在命令行上位于不同的目录中,则文本文件必须位于当前目录所在的位置,而不是可执行文件所在的目录。
编辑:刚刚从您的其他评论中看到您使用的是 OS X,并且(我假设)正在双击该程序。根据你的说法,我猜 OS X 将此类执行程序的当前目录设置为你的主目录。如果您想获取程序的目录,请参阅此问题的答案。如果您使用FindBin他们提到的软件包:
main = do
exedir <- getProgPath
handle <- openFile (exedir ++ "/primes-to-100k.txt") ReadMode
...
Run Code Online (Sandbox Code Playgroud)