상황은 이렇습니다. 저는 많은 파일을 생성했고, 파일이 생성된 후 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 앞에 추가하는 것을 잊어버린 것 같습니다.