この短期集中連載は連載終了後わんくま書房より書籍になります。(嘘)
パスってすごい根深い複雑なものです。
ただ構造化されたこの思想は開発から何十年たっても廃れていません。WinFSによって多少は変わると思いますが。
さてパス連結については以前までで説明しましたが、以下の問題に答えてみてください。
- c:
- c:\
- c:\a
- c:\a\
- a
- a\
- .\a
- .\a\
- c:\a\.
- c:\a\..
- c:\a\..\b
- \\server
- \\server\share
- \\server\share\
- \\server\share\a
1番はドライブか、ディレクトリ
2番はディレクトリ
3番はディレクトリかファイル
4番はディレクトリ
5番はディレクトリかファイル
6番はディレクトリ
7番はディレクトリかファイル
8番はディレクトリ
9番はディレクトリ
10番はディレクトリ
11番はディレクトリかファイル
12番はサーバ名
13番は共有名
14番はディレクトリ
15番はディレクトリかファイル
主にディレクトリかファイルかの判断はできない局面がほとんどです。
ここが一番いけてない所で文字列だけではそれが何を示しているかわからないのです。
たとえば面白い事象があります。
c:\temp\a\afile.txt (中身はafileと書く)
c:\temp\a\bfile.txt (中身はbfileと書く)
c:\temp>copy a b
とすると結果はどうなると思いますか?
bというファイルが出来上がりその中身は
afilebfile
となります。
xcopy a bとするとファイルかディレクトリかと聞かれることになります。
ディレクトリを選択すると
c:\temp\b\afile.txt (中身はafile)
c:\temp\b\bfile.txt (中身はbfile)
とコピーされます。
copyコマンドやxcopyコマンドはディレクトリを指定するとそのディレクトリの中身すべてをというように解釈しようとします。
SHFileOperationというAPIがあります。これはExplorerが動かすAPIでコピー中画面が出るやつです。
こいつの解釈は
コピー c:\temp\a c:\temp\b(APIなので、そんなに簡単ではないがイメージ的に)とすると、aディレクトリがbディレクトリにコピーされます。
c:\temp\a\afile.txt
c:\temp\a\bfile.txt
c:\temp\b\afile.txt
c:\temp\b\bfile.txt
この状態でもう一度実行すると、
c:\temp\a\afile.txt
c:\temp\a\bfile.txt
c:\temp\b\afile.txt
c:\temp\b\bfile.txt
c:\temp\b\a\afile.txt
c:\temp\b\a\bfile.txt
とbディレクトリの下にaディレクトリがコピーされます。
このような動作をしますが、これはあくまでパスの解釈の問題ということです。ディレクトリを指すものは、時にディレクトリ、時にディレクトリの中身を意味します。
今回のSHFileOperationを作成しました。http://blogs.users.gr.jp/naka/articles/2643.aspx