ようこそ 屋根裏部屋 mkII へ ログイン | 登録 | ヘルプ

Technological

ちょっとしたTIPSや私がはまったこと、調べたことなんかを書いていきます。

Windows のファイル-Part2 CRT とUNC

   1:  void SeparatePath(void)
   2:  {
   3:      TCHAR szFile[] = _TEXT("\\\\servername\\Sharename\\path\\base.txt");
   4:      TCHAR szDrive[_MAX_DRIVE + 1], szPath[_MAX_DIR + 1], szBase[_MAX_FNAME + 1], szExt[_MAX_EXT + 1];
   5:   
   6:      _tsplitpath(szFile, szDrive, szPath, szBase, szExt);
   7:      _tprintf(_TEXT("szdrive:%s szPath:%s szBase:%s szExt:%s\n"), szDrive, szPath, szBase, szExt);
   8:  }

 

典型的なUNCのファイル名をCRT(_tsplitpathは_splitpathのマルチバイト、ワイド文字をコンパイラオプションによって自動判定します)に渡した場合どうなるでしょう?

Part1でも書いたように、_MAX_DRIVEは3ですが、そもそもUNCにドライブ名はありません。よって、実行してみるとこんな結果になります。

つまりUNCの場合、ドライブには値が入らないということになります。必ずドライブ名がある…ということはありません。もちろん、この共有名をたとえばPドライブとしてネットワーク接続して、p:\path\base.txtというファイル名にすれば、szDriveにはちゃんとドライブ名(p:\)が入ります。

クライアントで使う分にはネットワーク接続でドライブ名を接続してしまうということもありますが、ネットワーク接続はユーザん単位なので、ログオンしたユーザと、サーバで処理しているユーザが同じとは限りません。よって、サーバ側の処理ではUNCを使うのが良いのではないでしょうか。

もっとも、サーバはまた特権の問題ではまりやすいポイントがいくつもあります。たとえばNetwork Services権限で動作している場合、ほとんどの場所には書き込みすることができないはずです。権限についてはまた別途書きます。


	

公開 2007年12月9日 2:40 投稿者 kkamegawa
タグ , , , ,

コメントの通知

この投稿にコメントが付いた場合にメールを受信するには、登録してください。ここ

また次のフィードから、お気に入りのRSSリーダーを使って最新の状態を知ることもできます。 コメントのRSSフィード

コメント

# Windows File name length limit @ 2007年12月13日 1:26

NTFSファイルシステムにおいて、CRTでは 256文字と定義されています が、 CreateFile ではワイド文字であれば、32767文字まで指定できるとあります。ちょっと実験してみましょう。 1:

Technological

どのような感想ですか?

(必須) 
必須 
(必須) 
Powered by Community Server, by Telligent Systems