いつもお世話になっております。
環境 WinXP、VB6.0
FileSystemオブジェクトを使ってフォルダを削除しようとすると、
"書き込みできません"とエラーが出ます。
※参照設定でScriptingRuntimeを適用済みです。
Dim objFSO As New FileSystemObject
dim strDelFolder As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDelFolder = "C:\DEL\TEST1"
objFSO.DeleteFolder (strDelFolder)
エラーが出てから削除対象のフォルダを見ると、フォルダ内の
ファイルは削除されています。
解決策をご存知の方いらっしゃいましたらアドバイスお願い致します。
削除対象フォルダに読み取り専用ファイルが存在しませんか?
隠しファイルになっている可能性もあります。
カレントディレクトリが削除するディレクトリになっていませんか?
もしそうであるならカレントディレクトリを変更してください。
キーワード:CurDir, ChDir
・そのフォルダにあるファイルを誰かが開いている
・そのフォルダをカレントディレクトリにしているプロセスが存在する
といった場合にも削除が失敗しますね。
みなさんお返事ありがとうございます。
削除の命令が実行される前に、CurDirでカレントディレクトリを
表示させたところ、削除対象のフォルダ以外のパスが表示されたので
問題ないと思われます。
削除対象フォルダは読み取り専用になっていました。
プロパティから読み取り専用のチェックを外した後、プロパティの
ウインドウを閉じて、すぐ再度フォルダのプロパティを見ると、
読み取り専用にチェックが入っていました。
この読み取り専用のチェックを外すことはできないのでしょうか?
また読み取り専用のフォルダをファイルごと削除する方法は
ないのでしょうか?
> 読み取り専用にチェックが入っていました。
いや、「On でも Off でも無い状態」じゃないですか?
(VB6 的にいえば、vbGrayed な状態)
だとしたら、そういうふうに表示されるのは、WinXPの仕様ですね。
Win2000の場合は、On または Off でしか表示されませんが、
XP のフォルダでは、状態に関係なく、常に vbGrayed で表示されます。
確認したいなら、エクスプローラの詳細表示モードで、
[属性]列を表示してチェックしてください。
> この読み取り専用のチェックを外すことはできないのでしょうか?
ヘルプで探せば、Attributes プロパティなどが見つかるかと。。。
環境をもう一度よく確認したところ、別プロセスが
使っていたようです。自分のミスでみなさんにお付き合いただいて
申し訳ありません。
カレントディレクトリの注意や、Attributesプロパティなど
とても勉強になりました。
今回の作業はフォルダ操作が多いので、特にプログラムでフォルダを作成
する場合など、Attributesプロパティを使用したいと思います。
みなさん本当にありがとうございました。
ツイート | ![]() |