dポイントプレゼントキャンペーン実施中!

Cでのフォルダの削除方法が分からず困っています。
ファイルの削除は"remove()"で行うことができましたが、フォルダは同じ方法ではできないようです。

No.394869 の質問を参考にして"SHFileOperation()"を使用してみたのですが、エラー担ってしまいました。(Access Violation)
"SHFILEOPSTRUCT"の値の設定(ハンドルなど)がうまくいっていないのかな?とも思ったのですが、
どうすればよいのかわかりません。

別の方法があればそれでもいいですし、"SHFileOperation()"の使い方(ハンドルの設定など)を知りたいのでよろしくお願いします。

ちなみに、今は以下の方法でやっていました。
フォルダ内(testfolder)は空の状態です。

********************************************
SHFILEOPSTRUCT shfileop;

/* ファイルの削除 */
shfileop.hwnd = NULL;
shfileop.wFunc = FO_DELETE;
shfileop.pFrom = "C:\\TEST\\testfolder";
shfileop.fFlags = FOF_SIMPLEPROGRESS|FOF_NOCONFIRMATION;

SHFileOperation(&shfileop);

A 回答 (2件)

FOF_SIMPLEPROGRESSが指定されていますね。



このときは、lpszProgressTitleが有効になるので構造体を初期化しないとエラーになるでしょう。

もしかしたらNULLでもだめで、文字列を指定しないといけないかも。

_rmdirは、空のディレクトリしか削除できない点に気をつけてくださいね。
    • good
    • 0
この回答へのお礼

ありがとうございます。

おっしゃるとおり、構造体の初期化に問題があったようです。

構造体の初期化をしてから実行してみたところ、
正常にフォルダを削除することができました。

これからも何かありましたらよろしくお願い致します。

お礼日時:2003/06/04 14:38

ファイル名は、最後にNULL文字が2つ連続する必要があります。



shfileop.pFrom = "C:\\TEST\\testfolder\0";

として試してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
早速"\0"を追加してやってみましたが、
他に問題があったようでエラーが発生してしまいました。

上司にも相談していろいろ聞いてもらったところ、
"_rmdir関数"というものがあり、それを使うようにと言われました。
その方法で試してみたら正常にフォルダが削除されたので、"_rmdir()"を使用することにします。

"SHFileOperation()"でのエラーについては、
時間を見つけて解決してみようと思います。

ありがとうございました。


ちなみに、_rmdir関数の使用法は以下の通りです。

intRet = _rmdir(strDirPath);

(strDirPath = 削除対象ディレクトリパス)

お礼日時:2003/06/04 09:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!