状況はこんな感じです。私は多くのファイルを生成し、ファイルが生成された後、statを使用してディレクトリ内のすべてのファイル情報を取得しました。
目的は、特定の日付より古いすべてのファイルを消去することです。
しかし、ファイルが生成された後にエラーが発生しました。
コードは次のとおりです。
//generate files
DIR *dp;
struct dirent *dirp;
struct stat buf;
time_t now;
const char* fileName;
now = time(NULL);
if((dp = opendir(outputDir.c_str())) == NULL)
{
WARNING("Fail to open directory: " << outputDir<< ", errno=" << ERRNO());
return;
}
while(dirp = readdir(dp))
{
fileName = dirp->d_name;
if(!strcmp(fileName, ".") || !strcmp(fileName, "..")) continue;
int ret = stat(fileName, &buf);
if(ret)
{
closedir(dp);
WARNING("Fail to get info for files "<< fileName <<" via stat, errno=" << ERRNO());
return;
}
if(now - buf.st_mtime <= days * 24 * 3600) continue;
int rret = unlink(fileName);
if(rret)
{
closedir(dp);
WARNING("Fail to remove file "<< fileName <<" , errno=" << ERRNO());
return;
}
}
closedir(dp);
この行でエラーが発生します。
int ret = stat(fileName, &buf);
errnoが2の場合、そのファイルやディレクトリはありません。しかし、ファイルを確認した結果、終了し、ファイルが作成された後にストリームをフラッシュしました。
理由を知っている人はいますか?ありがとうございます。
答え1
ファイル名の前に出力ディレクトリをstrcatの前に追加するのを忘れてしまったようです。