2016-04-18 5 views
0

Ich habe folgendes Programm, das eine Laufzeit Ausnahme auslöst:Wie bekomme ich den Pfad für openFile in Haskell?

import System.IO 

main :: IO() 
main = do 
    handle <- openFile "palindrome.txt" ReadMode 
    input <- hGetContents handle 
    hClose handle 

Es prüft geben, aber wenn ich versuche, main zu laufen, werde ich eine Fehlermeldung erhalten:

Atom session on Mac OS X

Was ist Ich mache falsch?

+0

Ein wenig mehr Informationen. Wo führst du dein Programm aus, wo ist 'file.txt'? – Zeta

+0

danke für die Antwort. Ich starte eine Shell und öffne dort den Ghci-Modus, auf einem Mac. file.txt befindet sich im selben Ordner wie das Programm selbst. – Mauritius

+0

[bearbeiten] Sie Ihre Frage mit zusätzlichen Informationen. Zeigen Sie Ihre gesamte GHCi-Sitzung und die relevanten Inhalte Ihres Arbeitsverzeichnisses an, z. 'ls -l * .txt'. – Zeta

Antwort

3

Ihr aktuelles Programm verwendet einen relativen Pfad. Daher muss sich die Datei in dem Verzeichnis befinden, in dem Sie GHCi gestartet haben. Vorausgesetzt, dass Ihr Arbeitsbereich $HOME/Desktop/Haskell ist, überprüft es wahrscheinlich nur für $HOME/Desktop/Haskell/palindrome.txt. Wenn Sie die palindrome.txt in $ HOME/Desktop/Haskell/u03/3-1/`verwenden möchten, müssen Sie entweder den absoluten Pfad in Ihrem Code verwenden oder GHCi in diesem Verzeichnis ausführen.

Beachten Sie, dass Sie das aktuelle Verzeichnis in GHCi mit :cd ändern können, so dass die folgenden Befehle in GHCi funktionieren sollte:

Prelude> :cd /path/to/your/directory 
Prelude> :l palindrom-a.hs 
*Main> :main 
+0

okay, funktioniert jetzt gut. wusste nicht, dass ich verwenden kann: cd in ghci. – Mauritius

+1

@Mauritius: Überprüfen Sie ':?' Oder ': help' für eine vollständige Liste aller Befehle. – Zeta