stat를 사용할 때 오류가 발생했습니다. errno=2

stat를 사용할 때 오류가 발생했습니다. errno=2

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

관련 정보