HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0209
Peakoディレクトリ・ドライブが存在しているかを確認する7解決


Peako

リンク

2010/2/9(Tue) 02:51:34|NO.30492

質問なのですが、ディレクトリやドライブが存在しているかどうかを確認するためには
どうすればいいでしょうか?

dirlist命令でディレクトリの存在を確認することは出来たのですが、
ドライブ名を指定すると存在しない、という結果になってしまい困っています。


dir1="c:\\Program Files" dir2="c:\\" dirlist s,dir1,5 mes stat dirlist s,dir2,5 mes stat

具体的には、エクスプローラーのようなものを作っていて、
入力されたパスに移動する際にこのような問題が生じてしまい困っています。
どうすればドライブ名を指定しても、それが存在していることを確認出来るでしょうか。

ご回答頂けるとありがたいです。



この記事に返信する


u

リンク

2010/2/9(Tue) 05:43:01|NO.30493

ドライブの容量を取得するwin32APIを使って、返ってきた容量を調べれば判断できるかも?
もっと手っ取り早い方法があったらすみません。


#uselib "kernel32.dll" #func GetDiskFreeSpaceEx "GetDiskFreeSpaceExA" var,int,var,int nDrive="c:\\" GetDiskFreeSpaceEx nDrive,NULL,size,NULL if size!=0{ mes "存在します" }else{ mes "存在しません" }

strmidで先頭3文字を切り出すようにすれば、ディレクトリやファイルなんかが引っ付いていても大丈夫ですね。


#uselib "kernel32.dll" #func GetDiskFreeSpaceEx "GetDiskFreeSpaceExA" var,int,var,int nDrive="c:\\User\\aaa.txt" nDrive=strmid(nDrive,0,3) GetDiskFreeSpaceEx nDrive,NULL,size,NULL if size!=0{ mes "存在します" }else{ mes "存在しません" }



inovia

リンク

2010/2/9(Tue) 07:04:18|NO.30495

ネットワークドライブ
(\\コンピュータ名\フォルダ)形式でも対応可能な
PathIsDirectoryはどうでしょうか。


#uselib "shlwapi.dll" #cfunc PathIsDirectory "PathIsDirectoryA" str mes "ディレクトリなら0以外が、そうでなければ0が返る" mes "C:\\ "+PathIsDirectory("C:\\") mes "X:\\ "+PathIsDirectory("X:\\")



u

リンク

2010/2/9(Tue) 07:17:46|NO.30496

おお、そんなものがあったのですか。
適当にググったら容量を調べるモジュールが出てきたので別の使い方を考えてみましたが。
勉強になりました。



HiroakiSoftware

リンク

2010/2/9(Tue) 19:13:36|NO.30498

ドライブが存在するかしないかは
Win32 APIのGetLogicalDrives関数で取得できます

サンプルを以下に上げときます


#uselib "Kernel32.dll" #func GetLogicalDrives "GetLogicalDrives" sdim DL,2 GetLogicalDrives OkDrives=stat repeat 26 DL=strf("%c",'A'+cnt) flag=1 << cnt if (OkDrives & flag){ color 0,0,255 print DL+"は存在します" }else{ color 255,0,0 print DL+"は存在しません" } loop



KA

リンク

2010/2/9(Tue) 20:03:55|NO.30499

>>dir2="c:\\"

>>dir2="c:"

こういうことでしょうか?

>>dir1="c:\\Program Files"

は、付けてないですよね。



Peako

リンク

2010/2/9(Tue) 21:07:29|NO.30500

>>uさん
容量を調べるという手がありましたね。
この件はinoviaさんが紹介してくださった方式で行きたいと思いますが、
この手法は、そのまま容量を調べる用途で使わせて頂きたいと思います。

>>inoviaさん
こんな簡単に取得出来たんですね…。
どんなパスでも一発で判定出来ると凄く楽です。紹介ありがとうございました。

>>HiroakiSoftwareさん
ドライブの一覧を取得する方法は考えたのですが、入力されたパスと照らし合わせるのが
なかなか面倒なことになりそうだったので今回は行いませんでした^^;
いつか他の所で使わせて頂くかもしれません。

>>KAさん
「c:」でも「c:\\」でもどちらでも良かったのですが、
Windowsのエクスプローラと同じように入力されたパスが存在するかどうか判定したかったのです。
どちらにしろ「c:」と「c:\\」の両方共、dirlistでは存在の確認が出来なかったので…。

これでツール作りの続きが出来ます。
皆さんご回答ありがとうございました。



KA

リンク

2010/2/9(Tue) 22:40:21|NO.30504

>>どちらにしろ「c:」と「c:\\」の両方共、dirlistでは存在の確認が出来なかったので…。

解決のようですが参考までに。
私の環境では「C:\\」はダメで、「C:」は大丈夫でした。
環境に因るのかな?



ONION software Copyright 1997-2021(c) All rights reserved.