디렉토리가 있는지 어떻게 확인할 수 있습니까?
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_mode
이 S_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
'Programing' 카테고리의 다른 글
MySQL : 여러 열의 MAX 또는 GREATEST를 가져 오지만 NULL 필드 (0) | 2021.01.10 |
---|---|
이 예제에서는 자동 줄 바꿈이 작동하지 않습니다. (0) | 2021.01.10 |
유한 높이의 자식이 있더라도 부모 div의 높이는 0입니다. (0) | 2021.01.10 |
SQL Server Express에서 연결할 수 없음 오류 : 28-서버가 요청 된 프로토콜을 지원하지 않습니다. (0) | 2021.01.10 |
GA의 새로운 analytics.js를 통해 맞춤 변수를 설정하는 방법 (0) | 2021.01.10 |