[mew-dist 29271] Re: System.EasyFile
Shuichi KITAGUCHI
ki at example.com
2010年 8月 13日 (金) 16:05:19 JST
北口です。
このメール見落してました。すみませんm(__)m
> Windows 環境も作ったので、ライブラリー単体のテストはしています。
>
> 1) cmew/smew が Windows でうまく行くか確かめて下さい。
okです。Mewからも使えました。
あと、この作業をしてて気付いた点を書いておきます。
・"smew 0" という感じで変なものを指定して起動させると、
smew: getFullPathName: invalid argument (...化けた文字...)
という風に表示されて、英語モードにすると、
smew: getFullPathName: invalid argument (The operation completed successfully.)
となります。ちゃんと指定すれば動くので害はないのですが、ちょっと
エラーメッセージが意味不明すぎるかな、と(最初悩んだ)。
ただ、getFullPathNameは、Haskwell本体っぽいですね。
・id.dbがない状態でcmewを起動すると、
cmew: <どこか>\id.db: copyFile: does not exist (No such file or directory)
と言われる(Ruby版では、なければ作りにいく)。cmewに-fを付ければok。
たぶんIndex.hsのwithNewDBのあたりだと思います。
> 2) System.EasyFile の仕様について、何かコメントがあれば
> お願いします。今はリンクがありませんが、そのうち上記
> URL の System.EasyFile がクリックできるようになります。
> そこに関数のドキュメントが現れます。
> 仕様が怪しいところには xxx を付けています。
沢山あって全部詳細には見れていないのですが、気付いた点をば。
# Haskwellの文法をわかってないので、とんちんかんなこと書いてたらすいません。
・isSymlink :: FilePath -> IO Bool
getLinkCount :: FilePath -> IO (Maybe Int)
hasSubDirectories :: FilePath -> IO (Maybe Bool)
→WindowsではNothingみたいなので、その旨の注釈を入れておいては?
・Directory.hs内のfixPathでの以下の行
| c == '\\' = '/' : fixPath cs
→'/'はpathSeparatorではない?
・splitExtension/splitDrive等
→MS-DOSからですが、_splitpath()という関数があり、これを使うとdrive、
dir、fname、extの4つの要素に分解してくれます。例えばこんな感じです。
[c:/dir/file.ext]
=>drive=[c:], dir=[/dir/], fname[file], ext=[.ext]
これに合わせてしまっても良いのでは、と思いました。そうすると、
「"\\\\shared\\test"のドライブ名は?」「Posixでのドライブ名とは?」、
という問題もなくなりますし。ただ、以降のファイル名/ドライブ名/ディレク
トリ名を扱う関数が全面的に影響を受けそうです。
[\\shared\test]
=>drive=[], dir=[\\shared\], fname[test], ext=[]
[/d]
=>drive=[], dir=[/], fname[d], ext=[]
参考 http://msdn.microsoft.com/en-us/library/e737s6tf(VS.80).aspx
・joinDrive
Windows: joinDrive "\\\\share" "foo" == "\\\\share/foo" -- xxx
Windows: joinDrive "/:" "foo" == "/:/foo" -- xxx
→これも上のようにすれば、そもそも"\\share\や"/:"をドライブ名として
扱うことはないのでは?、と思います。
・takeDirectory
Windows: takeDirectory "foo\\bar\\\\" == "foo\\bar" -- xxx
→これで良いと思います。
内部的には "foo\bar\\" → "foo\bar\" → "foo\bar" という感じですね。
Windows: takeDirectory "C:/" == "C:/"
→こっちは逆に、上の考えでいくなら"/"なのかなぁ、と。
・normalize
Windows: normalise "\\\\server\\test" == "\\\\server\\test" -- xxx
→これは"//server/test"にしちゃって良いと思いますが、懸念点は何でしょうか?
> 特にファイル名が \\ で始まるときに、どうすればいいのか
> さっぱり分かっていません。
細い規則はこのへんですね。
http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx
"\\?\D:\<very long path>"とか、"\\.\COM56"とか、得体の知れないのが
沢山ありますが、とりあえず気にしないのが正解なのではと思います。
# Haskwellでそんなのを扱うソフトを書くかどうか次第ですが。
--
Shuichi KITAGUCHI // kit at example.com / ki at example.com
Mew-dist メーリングリストの案内