디렉토리 존재 여부를 확인하는 이식 가능한 방법 [Windows / Linux, C]
주어진 디렉토리가 있는지 확인하고 싶습니다. Windows에서이 작업을 수행하는 방법을 알고 있습니다.
BOOL DirectoryExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
및 Linux :
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. */
}
하지만이 작업을 수행하는 휴대용 방법이 필요합니다 .. 어떤 OS Im을 사용하든 디렉토리가 존재하는지 확인할 수있는 방법이 있습니까? 아마도 C 표준 라이브러리 방식일까요?
전 처리기 지시문을 사용하고 다른 OS에서 해당 함수를 호출 할 수 있다는 것을 알고 있지만 이것이 내가 요구하는 솔루션이 아닙니다.
나는 적어도 지금은 이것으로 끝납니다.
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
int dirExists(const char *path)
{
struct stat info;
if(stat( path, &info ) != 0)
return 0;
else if(info.st_mode & S_IFDIR)
return 1;
else
return 0;
}
int main(int argc, char **argv)
{
const char *path = "./TEST/";
printf("%d\n", dirExists(path));
return 0;
}
stat () 는 Linux., UNIX 및 Windows에서도 작동합니다.
#include <sys/types.h>
#include <sys/stat.h>
struct stat info;
if( stat( pathname, &info ) != 0 )
printf( "cannot access %s\n", pathname );
else if( info.st_mode & S_IFDIR ) // S_ISDIR() doesn't exist on my windows
printf( "%s is a directory\n", pathname );
else
printf( "%s is no directory\n", pathname );
boost :: filesystem을 사용 하면 이러한 종류의 작업을 수행 할 수있는 휴대용 방법을 제공하고 모든 추악한 세부 사항을 추상화 할 수 있습니다.
GTK glib 를 사용하여 OS 항목에서 추상화 할 수 있습니다 .
glib provides a g_dir_open() function which should do the trick.
Since I found that the above approved answer lacks some clarity and the op provides an incorrect solution that he/she will use. I therefore hope that the below example will help others. The solution is more or less portable as well.
/******************************************************************************
* Checks to see if a directory exists. Note: This method only checks the
* existence of the full path AND if path leaf is a dir.
*
* @return >0 if dir exists AND is a dir,
* 0 if dir does not exist OR exists but not a dir,
* <0 if an error occurred (errno is also set)
*****************************************************************************/
int dirExists(const char* const path)
{
struct stat info;
int statRC = stat( path, &info );
if( statRC != 0 )
{
if (errno == ENOENT) { return 0; } // something along the path does not exist
if (errno == ENOTDIR) { return 0; } // something in path prefix is not a dir
return -1;
}
return ( info.st_mode & S_IFDIR ) ? 1 : 0;
}
ReferenceURL : https://stackoverflow.com/questions/18100097/portable-way-to-check-if-directory-exists-windows-linux-c
'IT TIP' 카테고리의 다른 글
헤더 이외의 Ajax DELETE 요청에서 데이터를 전달하는 방법 (0) | 2020.12.30 |
---|---|
IntelliJ에서 다음 중단 점으로 이동하는 방법은 무엇입니까? (0) | 2020.12.30 |
WPF의 MVVM에 대한 프로젝트 구조 (0) | 2020.12.30 |
Azure 테이블 스토리지 쿼리 비동기를 실행하는 방법은 무엇입니까? (0) | 2020.12.30 |
편집 후 활성 Julia 세션에서 모듈을 어떻게 다시로드합니까? (0) | 2020.12.30 |