掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
GetDriveTypeの最後が円記号がないのになぜ正常動作? (ID:143176)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
末尾に \ が無い場合、基本的には DRIVE_NO_ROOT_DIR が返されます。 少なくとも XP においては、ドライブレターの場合のみ、例外的に どちらでも動作してしまうのかもしれませんが、基本的には 末尾に \ が必要とされているようです。 たとえば以下のパターンでは、\ の有無で動作が変化します。 (1) C:\test の下に、Sample という空フォルダを配置しておく。 (2) USB フラッシュメモリーを接続する。 (3) [マイ コンピューター]を右クリックし、[管理]を選択。 (4) [記憶域]-[ディスクの管理]で、(2)のリムーバブルディスクを選択。 (5) 右クリックし、[ドライブ文字とパスの変更]を選択。 (6) [追加]を押して、C:\test\Sample にマウントする。 この状態においては、 GetDriveType("C:\test\sample\") … 2 , DRIVE_REMOVABLE GetDriveType("C:\test\sample") … 1 , DRIVE_NO_ROOT_DIR GetDriveType("C:\test\") … 3 , DRIVE_FIXED GetDriveType("C:\test" ) … 1 , DRIVE_NO_ROOT_DIR GetDriveType("C:\") … 3 , DRIVE_FIXED GetDriveType("C:") … 3 , DRIVE_FIXED という結果になるようです。 また、論理ドライブ(C: など)ではなく、物理ドライブ指定では、 GetDriveType("\\?\PhysicalDrive0\") … 3 , DRIVE_FIXED GetDriveType("\\?\PhysicalDrive0") … 1 , DRIVE_NO_ROOT_DIR という結果を返しますので、やはり末尾 \ が必要であるといえます。 また、別マシン上の共有フォルダへのアクセス時(UNCパス)も同様です。 GetDriveType("\\?\UNC\ServerName\ShareName\DirName\") … 4 , DRIVE_REMOTE GetDriveType("\\?\UNC\ServerName\ShareName\DirName") … 1 , DRIVE_NO_ROOT_DIR GetDriveType("\\?\UNC\ServerName\ShareName\") … 4 , DRIVE_REMOTE GetDriveType("\\?\UNC\ServerName\ShareName") … 1 , DRIVE_NO_ROOT_DIR GetDriveType("\\?\UNC\ServerName\IPC$\") … 4 , DRIVE_REMOTE GetDriveType("\\?\UNC\ServerName\IPC$") … 1 , DRIVE_NO_ROOT_DIR GetDriveType("\\ServerName\ShareName\DirName\") … 4 , DRIVE_REMOTE GetDriveType("\\ServerName\ShareName\DirName") … 1 , DRIVE_NO_ROOT_DIR GetDriveType("\\ServerName\ShareName\") … 4 , DRIVE_REMOTE GetDriveType("\\ServerName\ShareName") … 1 , DRIVE_NO_ROOT_DIR GetDriveType("\\ServerName\IPC$\") … 4 , DRIVE_REMOTE GetDriveType("\\ServerName\IPC$") … 1 , DRIVE_NO_ROOT_DIR > Mid(sPath,1,2) ※sPath変数(String)の中身はA:\ > などと書いてありMid(sPath,1,2)をMid(sPath,1,3)した方がいいのか > 迷っています。 sPath の内容が "A:\" 形式なのは固定的なのでしょうか? UNC パス、\\?\〜 や \\.\〜 形式のパスが指定される事がありえるなら、 そもそも Mid する前に、内容チェックを行う必要があるかと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.