2012-04-26 7 views
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シンボルのパスを使用すると、doesFileExistdoesDirectoryExistは常にFalseを返します。どうして?Haskell System.Directory.doesFileExistおよび非ASCIIパス

  • のDebian GNU/Linuxの6.0 x86_64のGHC 7.xのシリーズへ
  • GHC 6.12.1
+2

[GHC#3307(UnixではUnicode対応ではないSystem.IOおよびSystem.Directory関数)](http://hackage.haskell.org/trac/ghc/ticket/3307)を参照してください。正しく読んでいれば、GHC 7.2.1以降で修正されています。 – hammar

+0

ありがとう、ありがとうございます。 –

答えて

2

アップグレード - 6.12は、今日のうちほぼ3年です。この行動は1年前に修正されました。

+0

ありがとう! 7.4.1にアップグレードしてください。このコードはByteStringを使わなくても完全に動作します。 –

関連する問題