1
import System.Directory
import qualified Data.ByteString as BS
import qualified Data.ByteString.UTF8 as BS_UTF8
main = do
putStrLn "Input path to some file: "
raw_inputed_path <- BS.getLine
let inputed_path = BS_UTF8.toString raw_inputed_path
such_file_exists <- doesFileExist inputed_path
such_directory_exists <- doesDirectoryExist inputed_path
if such_file_exists
then putStrLn "Yeah, I see it!"
else if such_directory_exists
then putStrLn "Aha, I see it, but it's a directory!"
else putStrLn "Hmm... No such..."
このコードは、ASCIIパスのみで完全に動作します。しかし、非ASCIIシンボルのパスを使用すると、doesFileExist
とdoesDirectoryExist
は常にFalse
を返します。どうして?Haskell System.Directory.doesFileExistおよび非ASCIIパス
- のDebian GNU/Linuxの6.0 x86_64のGHC 7.xのシリーズへ
- GHC 6.12.1
[GHC#3307(UnixではUnicode対応ではないSystem.IOおよびSystem.Directory関数)](http://hackage.haskell.org/trac/ghc/ticket/3307)を参照してください。正しく読んでいれば、GHC 7.2.1以降で修正されています。 – hammar
ありがとう、ありがとうございます。 –