Windows에 C로 디렉토리가 있는지 어떻게 확인합니까?
질문
Windows C 응용 프로그램에서 지정된 경로가 있는지 확인하기 위해 함수에 전달 된 매개 변수의 유효성을 검사하고 싶습니다. *
Windows에 C로 디렉토리가 있는지 어떻게 확인합니까?
* 나는 당신이 존재를 확인하는 시간과 더 이상 존재하지 않는 경로를 사용하는 시간 사이에 경쟁 조건에 들어갈 수 있다는 것을 알고 있지만, 그것을 처리 할 수 있습니다.
추가 배경
디렉토리가 존재하거나 존재하지 않는다는 것을 명시 적으로 아는 것은 권한이 작용할 때 까다로울 수 있습니다. 디렉터리가 있는지 확인하려고 시도 할 때 프로세스에 디렉터리 또는 상위 디렉터리에 액세스 할 수있는 권한이 없을 수 있습니다. 이것은 내 필요에 적합합니다 . 디렉터리가 존재하지 않거나 액세스 할 수없는 경우 둘 다 내 응용 프로그램에서 잘못된 경로 오류로 처리되므로 구분할 필요가 없습니다. 솔루션이 이러한 구분을 제공하는 경우 (가상) 보너스 포인트.
C 언어, C 런타임 라이브러리 또는 Win32 API의 모든 솔루션이 좋지만 이상적으로는 일반적으로로드되는 라이브러리 (예 : kernel32, user32 등)를 고수하고 비표준 라이브러리로드와 관련된 솔루션을 피하고 싶습니다. ( Shlwapi.dll의 PathFileExists 처럼 ). 다시 말하지만, 솔루션이 크로스 플랫폼 인 경우 (가상) 보너스 포인트.
관련
파일이 존재하는지 Win32 프로그램을 사용하지 않는지 어떻게 확인할 수 있습니까?
다음과 같이하십시오.
BOOL DirectoryExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
GetFileAttributes와 () 메소드의 Kernel32.dll에 포함된다.
다음은 완전히 플랫폼에 구애받지 않는 솔루션입니다 (표준 C 라이브러리 사용).
편집 : 이 리눅스에서 컴파일하려면, 교체 <io.h>
로 <unistd.h>
와 _access
함께 access
. 실제 플랫폼에 구애받지 않는 솔루션의 경우 Boost FileSystem 라이브러리를 사용하십시오.
#include <io.h> // For access().
#include <sys/types.h> // For stat().
#include <sys/stat.h> // For stat().
bool DirectoryExists( const char* absolutePath ){
if( _access( absolutePath, 0 ) == 0 ){
struct stat status;
stat( absolutePath, &status );
return (status.st_mode & S_IFDIR) != 0;
}
return false;
}
MBCS 및 UNICODE 빌드를 모두 지원하는 Windows 관련 구현 :
#include <io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <tchar.h>
BOOL directory_exists( LPCTSTR absolutePath )
{
if( _taccess_s( absolutePath, 0 ) == 0 )
{
struct _stat status;
_tstat( absolutePath, &status );
return (status.st_mode & S_IFDIR) != 0;
}
return FALSE;
}
Shell Lightweight API (shlwapi.dll)에 연결해도 괜찮다 면 PathIsDirectory 함수를 사용할 수 있습니다 .
또 다른 옵션은 쉘 함수 PathFileExists ()입니다.
이 기능은 "파일이나 디렉토리와 같은 파일 시스템 개체에 대한 경로가 유효한지 여부를 결정합니다."
참고 URL : https://stackoverflow.com/questions/6218325/how-do-you-check-if-a-directory-exists-on-windows-in-c
'programing tip' 카테고리의 다른 글
C ++에서 사소하지 않은 생성자는 무엇입니까? (0) | 2020.11.24 |
---|---|
github에서 저장소 이름을 바꾸는 방법은 무엇입니까? (0) | 2020.11.24 |
PHP에서 플랫폼 독립적 인 디렉토리 구분자를 얻는 방법은 무엇입니까? (0) | 2020.11.24 |
Chrome / Firefox console.log는 항상 undefined라는 줄을 추가합니다. (0) | 2020.11.24 |
getLoaderManager (). initLoader ()는 클래스 (ListFragment)가 LoaderManager.LoaderCallbacks를 구현하지만 'this'를 인수로 허용하지 않습니다. (0) | 2020.11.23 |