Programing

디렉토리가 있는지 어떻게 확인할 수 있습니까?

crosscheck 2021. 1. 10. 19:13
반응형

디렉토리가 있는지 어떻게 확인할 수 있습니까?


C에서 Linux에 디렉토리가 있는지 어떻게 확인할 수 있습니까?


실패시 다음을 사용 opendir()하고 확인할 수 있습니다 ENOENT == errno.

#include <dirent.h>
#include <errno.h>

DIR* dir = opendir("mydir");
if (dir) {
    /* Directory exists. */
    closedir(dir);
} else if (ENOENT == errno) {
    /* Directory does not exist. */
} else {
    /* opendir() failed for some other reason. */
}

다음 코드를 사용하여 폴더가 있는지 확인하십시오. Windows 및 Linux 플랫폼 모두에서 작동합니다.

#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char* argv[])
{
    const char* folder;
    //folder = "C:\\Users\\SaMaN\\Desktop\\Ppln";
    folder = "/tmp";
    struct stat sb;

    if (stat(folder, &sb) == 0 && S_ISDIR(sb.st_mode)) {
        printf("YES\n");
    } else {
        printf("NO\n");
    }
}

stat()의 주소를 사용 하고 전달한 struct stat다음 구성원 st_modeS_IFDIR설정 되었는지 확인할 수 있습니다 .

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

...

char d[] = "mydir";

struct stat s = {0};

if (!stat(d, &s))
  printf("'%s' is %sa directory.\n", d, (s.st_mode & S_IFDIR)  : "" ? "not ");
  // (s.st_mode & S_IFDIR) can be replaced with S_ISDIR(s.st_mode)
else
  perror("stat()");

가장 좋은 방법은 아마도 opendir()예를 들어 사용하여 열어 보는 것입니다 .

파일 시스템 리소스 사용 하고 파일 시스템 리소스 사용 하여 오류가 발생하는 경우 확인하고 나중에 시도하는 것보다 처리하는 것이 가장 좋습니다 . 후자의 접근 방식에는 명백한 경쟁 조건이 있습니다.


According to man(2)stat you can use the S_ISDIR macro on the st_mode field:

bool isdir = S_ISDIR(st.st_mode);

Side note, I would recommend using Boost and/or Qt4 to make cross-platform support easier if your software can be viable on other OSs.


You may also use access in combination with opendir to determine if the directory exists, and, if the name exists, but is not a directory. For example:

/* test that dir exists (1 success, -1 does not exist, -2 not dir) */
int
xis_dir (const char *d)
{
    DIR *dirptr;

    if (access ( d, F_OK ) != -1 ) {
        // file exists
        if ((dirptr = opendir (d)) != NULL) {
            closedir (dirptr);
        } else {
            return -2; /* d exists, but not dir */
        }
    } else {
        return -1;     /* d does not exist */
    }

    return 1;
}

Another two ways, maybe less correct is to use. The first one, using only standard libraries and for files only:

FILE *f;
f = fopen("file", "r")
if(!f)
   printf("there is no file there");

This one might work on all the OS.

Or another also for dirs, using the system call with system(). Is the worst option, but gives you another way. For someone maybe useful.

ReferenceURL : https://stackoverflow.com/questions/12510874/how-can-i-check-if-a-directory-exists

반응형