中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

パス(Path)について考える。 その3 解釈方法

この短期集中連載は連載終了後わんくま書房より書籍になります。(嘘)

パスってすごい根深い複雑なものです。
ただ構造化されたこの思想は開発から何十年たっても廃れていません。WinFSによって多少は変わると思いますが。

さてパス連結については以前までで説明しましたが、以下の問題に答えてみてください。

  1. c:
  2. c:\
  3. c:\a
  4. c:\a\
  5. a
  6. a\
  7. .\a
  8. .\a\
  9. c:\a\.
  10. c:\a\..
  11. c:\a\..\b
  12. \\server
  13. \\server\share
  14. \\server\share\
  15. \\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

投稿日時 : 2004年5月15日 13:02

コメントを追加

# eFUIKAGGkgYjvqnv 2011/11/28 19:41 http://www.laurenslinens.com/

Totally agree with you, about a week ago wrote about the same in my blog..!

タイトル
名前
URL
コメント