물마중
[Windows System] 디렉터리 컨트롤 본문
디렉터리의 생성과 소멸 :
BOOL CreateDirectory(
LPCTSTR lpPathName, // 생성하려는 디렉터리 이름
LPSECURITY_ATTRIBUTES lpSecurityAttributes // 보안속성
);
BOOL RemoveDirectory(
LPCTSTR lpPathName // 소멸하려는 디렉터리 이름
);
(참고 : 절대경로 지정시 마지막 디렉터리만 생성한다.
즉, C:\\AAA\BBB 일때 (AAA 디렉터리는 존재하지 않는다) 컴퓨터는 절대로 AAA 디렉터리를 만들어 주지
않는다. 따라서 BBB 디렉터리도 만들어지지 않는다. AAA 디렉터리가 존재해야 BBB 디렉터리가 생성된다.
현재 디렉터리, 시스템 디렉터리, Windows 디렉터리 :
현재 디렉터리(Current Directory)
: 처음에는 프로그램이 로드(Load)된 디렉터리(실행파일이 존재하는 디렉터리)로 설정되며, 이후 변경 가능하다
DWORD GetCurrentDirectory(
DWORD nBufferLength, // 버퍼의 길이를 지정
LPTSTR lpBuffer // 현재 디렉터리 정보를 저장할 버퍼의 주소값을 지정
);
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // 변경하고자 하는 현재 디렉터리 정보 지정
);
시스템 디렉터리(System Directory) & Windows 디렉터리
System Directory : C:\\WINDOWS\system32 // 시스템에 중요한 파일들이 존재하는 위치
Windows Directory : C:\\WINDOWS // 초기화 및 실행파일들이 존재하는 위치
변경이 불가능하다.
디렉터리에서 파일 찾기 :
DWORD SearchPath(
LPCTSTR lpPath, // 대상 경로 지정 ( 지정된 경로에서 파일을 찾게된다 )
// NULL : 표준 검색 경로로 검색
LPCTSTR lpFileName, // 찾고자 하는 파일 이름
LPCTSTR lpExtension, // 확장자를 지정하는 파라미터
DWORD nBufferLength, // 완전경로명을 저장할 버퍼의 길이
LPCTSTR lpBuffer, // 완전경로명을 저장할 버퍼의 주소
LPCTSTR *lpFilePart // 완전경로명에서 파일이름을 가리키는 포인터값
);
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR *argv[])
{
TCHAR fileName[MAX_PATH];
TCHAR bufFilePath[MAX_PATH];
LPTSTR lpFilePart;
DWORD result;
_tprintf(_T("Insert name of the file to find : "));
_tscanf(_T("%s"), fileName);
result = SearchPath(NULL, fileName, NULL, MAX_PATH, bufFilePath, &lpFilePart);
if(result == 0)
{
_tprintf(_T("File not fount! \n"));
}
else
{
_tprintf(_T("File path : %s \n"), bufFilePath);
_tprintf(_T("File Name : %s \n"), lpFilePart);
}
return 0;
}
(참고 :
표준 검색 경로 :
1. 실행 중인 프로그램이 로드(Load)된 디렉터리(실행파일이 존재하는 디렉터리)
2. 현재 디렉터리
3. 시스템 디렉터리
4. Windows 디렉터리
5. 환경변수 PATH에 등록된 디렉터리
지정된 디렉터리 내에 존재하는 파일목록 :
1. HANDLE FindFirstFile(
LPCTSTR lpFileName, // 파일이나 디렉터리 이름을 지정
LPWIN32_FIND_DATA lpFindFileData // 발견된 파일이나 디렉터리 정보를 담을
); // WIN32_FIND_DATA 구조체 변수주소
2. BOOL FindNextFile(
HANDLE hFindFile, // FindFirstFile 함수 호출을 통해 얻은 핸들을 전달
LPWIN32_FIND_DATA lpFindFileData // 발견된 파일이나 디렉터리 정보를 담을
); // WIN32_FIND_DATA 구조체 변수주소
3. BOOL FindClose(
HANDLE hFindFile // FIndFirstFile 함수를 통해 얻은 핸들 반환
);
FindFirstFile 함수 호출을 통해서 생성되는 커널 오브젝트가 담고 있는 정보는 검색된 첫번째 디렉터리(파일)이다.
이어서 FindNextFile 함수를 호출하면 다음에 검색되는 디렉터리에 대한 정보가 채워진다.
(또 검색될 디렉터리가 있다면 FindNextFile 함수를 또 호출한다)
커널 오브젝트가 생성되었기에 FindClose 함수로 리소스를 반환해야 한다.
[예제보기]
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR *argv[])
{
WIN32_FIND_DATA FindFileData;
TCHAR DirSpec[MAX_PATH];
_tprintf(_T("Insert target directory : "));
_tscanf(_T("%s"), DirSpec);
_tcsncat(Dirspec, _T("\\*"), 3);
HANDLE hFind = FindFirstFile(DirSpec, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE)
{
_tprintf(_T("invalid file handle \n"));
return -1;
}
else
{
_tprintf(_T("First File Name is %s \n"), FindFileData.cFileName);
while(FindNextFile(hFind, &FindFileData)!=0)
{
_tprintf(_T("Next File Name is %s \n"), FindFileData.cFileName);
}
FindClose(hFind);
}
}
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttritubes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
} WIN32_FIND_DATA, *PWIN32_FIND+DATA; )
'Programming > Windows System' 카테고리의 다른 글
[Windows System] 라이브러리 (0) | 2011.03.13 |
---|---|
[Windows System] 비동기 I/O 와 APC (0) | 2011.03.13 |
[Windows System] 파일 입출력(File Input/Output) (0) | 2011.02.25 |
[Windows System] 가상 메모리(Virtual Memory) (0) | 2011.02.24 |
Windows에서 소켓프로그래밍하기-기초 (0) | 2011.02.17 |