2010年8月13日

[mew-dist 29271] Re: System.EasyFile

北口です。

このメール見落してました。すみません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@xxxxx / ki@xxxxx


投稿者 xml-rpc : 2010年8月13日 16:05
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97635
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。