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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0616
calbeeuidirlistでのフォルダ有無確認について5解決


calbeeui

リンク

2014/6/16(Mon) 17:33:30|NO.62467

(http://lhsp.s206.xrea.com/command/dirlist.html)
より
dirlist命令でフォルダの有無を確認出来ることは知っているのですが、
dirlist命令だとドライブのルートディレクトリ(C:\\ など)の有無を確認出来ないように
思われます。どうすればよろしいでしょうか?
要領を得ない質問だとは思われますが回答のほどよろしくお願いします。



この記事に返信する


m

リンク

2014/6/16(Mon) 18:11:36|NO.62469

PathIsDirectoryで判定すれば良いかと思われます。

#uselib "shlwapi.dll" #func PathIsDirectory "PathIsDirectoryA" sptr // 指定されたパスが存在しない場合は 0 が返る path = "C:\\" : PathIsDirectory path : mes path+" = "+stat path = "C:\\Users\\" : PathIsDirectory path : mes path+" = "+stat path = "D:\\" : PathIsDirectory path : mes path+" = "+stat path = "E:\\" : PathIsDirectory path : mes path+" = "+stat path = "F:\\" : PathIsDirectory path : mes path+" = "+stat path = "G:\\" : PathIsDirectory path : mes path+" = "+stat



skyblue

リンク

2014/6/16(Mon) 18:14:02|NO.62470

Cドライブに関してはフォルダ内のファイルやフォルダを取得することで代用できます。
それ以外でも1つ以上のファイルやフォルダがあれば可能です。
Cドライブに関しては必ず1以上になるので
マスク条件にもよりますが



kanahiron

リンク

2014/6/16(Mon) 18:30:16|NO.62471

先に回答がありますが書いてしまったので投下します(´・ω・`)
WinAPIのkernel32.dllを使いました

#uselib "kernel32.dll"
#func GetLogicalDriveStrings "GetLogicalDriveStringsA" int,int bufsize = 256 sdim buf,bufsize+1 GetLogicalDriveStrings bufsize,varptr(buf) //この関数で返ってくる文字はなんとnull文字区切り //なのでHSPでは最初以外表示されない(´・ω・`) //一応 ;mes buf // repeat bufsize if peek(buf,cnt) = 0{ if peek(buf,cnt+1) = 0{ //区切りの最後はnull文字が2回続くようなので //2回続いたらループからbreakで抜ける break } else { //null文字が1個だったら区切り memcpy buf,buf,bufsize-cnt-2,cnt+1,cnt //memcpyで1つずらして wpoke buf,cnt,2573 //wpokeでnull文字ごと改行コードで上書き } } loop mes buf mes "\n\n\n" //後は letter = "D:\\" //検索したい文字 if instr(buf,0,letter) != -1{ mes letter+"は存在します" }
まじめに解説入れてみたのでわかりやすいと思います



calbeeui

リンク

2014/6/17(Tue) 17:06:42|NO.62480

m さん
プログラムコード量的にも少ないし、dirlist命令よりも
使いやすそうなのでこれを使わせていただきます。

skyblue さん
すみません、確かにCドライブならそれでいいのですが
あくまで「C:\\ "など"」なのでそれ以外のドライブを指定する可能性もありかつ、
そのドライブが空だったらダメなので・・・
質問にそのことを書いていなかったので申し訳ないです。

kanahiron さん
細かい解説ありがとうぞざいます。
これはこれで別の用途(マイコンピュータ風やドライブ指定をする時)
に使えそうなので使ってみようかと思います。


皆さん回答ありがとうございました、HSP掲示板では初めて
質問したのですが投稿時間をみるとわずか1時間で解決したようなので驚きました。



skyblue

リンク

2014/6/18(Wed) 16:29:42|NO.62491

空のドライブでも指定している時点で存在しているものしか指定していないはずなので
大丈夫なはずです。
初回以外はファイルやサブフォルダを読み書きするとき以外は確認する必要がないので
そっちの存在確認で代用できます。
そもそも、ドライブの存在を確認する必要ってありますか?
無いように思えるのですけど。



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