プログラム作成中に問題に当たったので、解決方法をご存知な方がいましたらお教えください。
今、プログラムから任意のフォルダ(たとえばC:\a)の名前を変更するというものを製作しています。
私は始め、Nameステートメントを使ってフォルダの名前を変えることが出来ないかと思い上記のc:\aのフォルダ名をc:\bに変更するプログラムを
Name "c:\a" as "c:\b"
のように仮に書いてみました。
しかし、この方法では変更できるフォルダと変更できないフォルダがありました。しかも、それは毎回ランダムに発生します。
(Nameステートメントはファイル名を変更するものだとは知っていますが・・・)
VBの標準関数を調べて見ましたが、フォルダの名前を変更するものは見当たらなかったのですが、どなたかご存知の方がいましたら教えてください。
APIでもかまいません。
お願いします。
フォルダー名の変更はNameでいいはずです。
変えようとするフォルダーがエクスプロラーで
使用されていたりすると、変更が出来ません。
APIはSHFileOperation()であったと思います。
Dosのrenameで変える方法もあります。
いずれにしろなぜNameで変更が出来ないのか、
調べる必要があります。
こんにちは。
ねろ様、早速の回答ありがとうございました。
パソコンの調子がおかしく、すぐに返答ができずにすみませんでした。
"c:\a"のファイル名を変えるのに、APIを使おうかといろいろ情報をそろえていたとき、タスクバーに"c:\"フォルダがエクスプローラによって開かれていることに気づきました。
もしや・・・と思って閉じると、名前の変更を受け付けるようになりました。
私は、"c:\"フォルダをエクスプローラで開いているときは、その下の階層のフォルダの名前の変更が可能だと思っていました。
こんな簡単なことで・・・恥ずかしい限りです。ご指摘ありがとうございました。
もし、(ないとは思いますが・・・)フォルダの名前を強制的に変えることのできる方法などがありましたらお教えください。
>フォルダの名前を強制的に変えることのできる方法...
OSが何かにも依ると思いますが、98の頃はエクスプローラー
が使用しているフォルダー名をを変えてしまい、エクスプローラー
のエラーが出て困った事があったような気がします。
NT系になってからは出ないような気がしますが定かではありません。
仮に名前を変えることが出来ても、かえって厄介になるのでは。
フォルダーの名前変更に失敗したら、開いているエクスプローラーの
ハンドルを取得して、エクスプローラーを閉じるようにしたらいかがでしょうか。
ただしエクスプローラーはかなり特殊なので、ハンドルの取得からクローズ
までうまくいくかどうか判りません。(かなり無責任(^^;)
私の場合だと、MsgBoxで”エクスプローラー閉じてね!”なんてやりますが.....
こんなところしか、あまり参考になりませんね。
現在エクスプローラで開かれているフォルダを判断するには、ShellFolderView.Folder を利用できます。また、Quitメソッドを呼び出せば、エクスプローラを閉じる事も可能です。
ただ、そこまでして無理にディレクトリを解放させるのは、ソフトウェアの動作としては、あまり行儀の良い物では無いと思います。ファイルのコピー中などに、無理にディレクトリを強制解放されてしまうと、困ってしまいますよね。……それに、ディレクトリやフォルダを掴んでいるのは、エクスプローラだけとは限りませんし。
フォルダ名を変更できなかった時には、適当なメッセージボックスを表示して、ユーザーに以降の処理を再試行する/無視して続行する/処理を中断するかの判断を問い合わせるようにしてみては如何でしょうか。
ツイート | ![]() |