ページ 11

ファイル、ディレクトリ操作

Posted: 2010年12月12日(日) 12:44
by ynhrt
フォルダを削除するプログラムを作っています。空のフォルダを削除する関数はわかりました。しかし、空でないと削除できないので先に中のファイルを削除し、その後フォルダを削除するプログラムは作りました。
でも、フォルダの中にフォルダがあると削除できません。どのようにしたらいいでしょうか。

コード:

             char foldername = "aaa";
	char motodirectory[260];
	GetCurrentDirectory(_MAX_PATH,motodirectory);
	SetCurrentDirectory(foldername);
	HANDLE hFind;
    WIN32_FIND_DATA fd;

	hFind = FindFirstFile("?*",&fd);
do {
	DeleteFile(fd.cFileName);
	} while (FindNextFile(hFind,&fd));
FindClose(hFind);
SetCurrentDirectory(motodirectory);
RemoveDirectory(foldername);
 

Re: ファイル、ディレクトリ操作

Posted: 2010年12月12日(日) 13:16
by Ciel
フォルダの中のフォルダを消してから削除すればいいのではないですか?

Re: ファイル、ディレクトリ操作

Posted: 2010年12月12日(日) 13:22
by non
再帰呼び出し(リカーシブコール)を使うのかな。
昔作った時には、そうしたと思う。

Re: ファイル、ディレクトリ操作

Posted: 2010年12月12日(日) 13:30
by へろりくしょん
再帰的にフォルダをたぐって行くのが一般的かと。
こんな感じ。

コード:

deleteDirectory(const char *path)
{
    hFind = FindFirstFile(path, &fd);
    do {
        if(hFind がフォルダだったら){
            deleteDirectory(hFind のパス);
        }else{
            フォルダじゃないから普通に消す。
        }
    } while (FindNextFile(hFind,&fd));
    FindClose(hFind);

    RemoveDirectory(path);
}