파일 I/O 와디렉터리컨트롤 1
목차 기본적인파일처리 파일검색 파일열기 & 닫기 파일읽기 & 쓰기 삭제, 복사, 이동 (?) 파일의시간정보얻기 파일특성정보얻기 파일포인터 directory 생성 & 삭제 경로설정 경로얻기 2
파일생성 / 열기 HANDLE CreateFile ( LPCTSTR lpfilename, DWORD dwdesiredaccess, 파일이름 읽기 / 쓰기권한지정 DWORD dwsharemode, LPSECURITY_ATTRIBUTES lpsecurityattributes, DWORD dwcreationdisposition, DWORD dwflagsandattributes, HANDLE htemplatefile dwdesiredaccess GENERIC_READ GENERIC_WRITE 동시접근보안 동일특성의새파일생성시 dwsharemode 0, FILE_SHARE_READ FILE_SHARE_WRITE 3
파일생성 / 열기 HANDLE CreateFile ( LPCTSTR lpfilename, DWORD dwdesiredaccess, DWORD dwsharemode, LPSECURITY_ATTRIBUTES lpsecurityattributes, DWORD dwcreationdisposition, DWORD dwflagsandattributes, HANDLE htemplatefile 생성 / 덮어쓰기등 CREATE_ALWAYS 새파일생성 / 기졲파일 : 덮어쓰기 CREATE_NEW 새파일생성 / 기졲파일 : 함수실패 OPEN_ALWAYS 기졲파일열기 / 없으면실패 OPEN_EXISTING 기졲파일열기 / 없으면새로생성 TRUNCATE_EXISTING 파일길이 0 설정 4
파일생성 / 열기 HANDLE CreateFile ( LPCTSTR lpfilename, DWORD dwdesiredaccess, DWORD dwsharemode, LPSECURITY_ATTRIBUTES lpsecurityattributes, DWORD dwcreationdisposition, DWORD dwflagsandattributes, HANDLE htemplatefile 파일특성 / 플래그 특성 (15개) FILE_ATTRIBUTE_NORMAL 다른특성이없을때 FILE_ATTRIBUTE_READONLY 응용이쓰기 / 삭제할수없음 플래그 (10개) FILE_FLAG_DELETE_ON_CLOSE 마지막파일핸들이 close될때, 파일이삭제됨 FILE_FLAG_OVERLAPPED 비동기 I/O 설정 5
파일닫기 BOOL CloseHandle( HANDLE hobject 6
파일읽기 BOOL ReadFile ( HANDLE hfile, LPVOID lpbuffer, DWORD nnumberofbytestoread, LPDWORD lpn umberofbytesread, LPOVERLAPPED lpoverlapped 파일핸들읽기메모리버퍼읽어들일개수실제읽은개수중첩 I/O, offset 7
파일쓰기 BOOL WriteFile ( HANDLE hfile, LPVOID lpbuffer, DWORD nnumberofbytestowrite, LPDWORD lpnumberofbyteswrite, LPOVERLAPPED lpoverlapped 파일핸들쓰기메모리버퍼쓰기개수실제쓴개수중첩 I/O, offset 8
파일포인터 (1) 파일임의접근을위해파일포인터를임의의값으로설정 DWORD SetFilePointer( HANDLE hfile, LONG ldistancetomove, PLONG lpdistancetomovehigh, DWORD dwmovemethod 파일핸들파일포인터이동거리 ( 하위 ) 파일포인터이동거리 ( 상위 ) 이동방법 9
파일포인터 (2) 파일 FILE_BEGIN FILE_CURRENT FILE_END + 이동거리 -이동거리 + 이동거리 -이동거리 + 이동거리 10
파일포인터 (3) 4GB 미맊파일크기표현 : DWORD 32bit 정수표현 DWORD : 00000000 ~ FFFFFFFF 2 32 1 : 에러값으로사용 표현가능파일크기 : 0 ~ 2 32-2. 0 2 32-2 11
파일포인터 (4) 4GB 이상파일크기표현 : DWORD + DWORD : LARGE_INTEGER 32bit + 32bit 정수표현 하위 DWORD : 00000000 ~ FFFFFFFF 상위 DWORD : 00000000 ~ FFFFFFFF 표현가능파일크기 : 0 ~ 2 64-1. 2 32 1 : 에러값으로사용 0 2 32-1 0 2 32-1 GetLastError : NO_ERROR 12
파일포인터 (5) 파일임의접근을위해파일포인터를임의의값으로설정 BOOL SetFilePointerEx( HANDLE hfile, LARGE_INTEGER lidistancetomove, PLARGE_INTEGER lpnewfilepointer, DWORD dwmovemethod 파일핸들파일포인터이동거리 ( 입력 ) 파일포인터 ( 출력 ) 이동방법 13
파일포인터 (6) typedef struct _OVERLAPPED { ULONG_PTR Internal; ULONG_PTR InternalHigh; union { struct { DWORD Offset; DWORD OffsetHigh; }; PVOID Pointer; }; HANDLE hevent; } OVERLAPPED 파일포인터 14
파일삭제 BOOL DeleteFile( LPCTSTR lpfilename 15
파일복사 BOOL CopyFile( LPCTSTR lpexistingfilename, LPCTSTR lpnewfilename, BOOL bfailifexists 기존파일이름 복사된파일이름 존재플래그 복사된파일이름이졲재할경우 졲재플래그 : false 기졲파일대체 16
파일이동 BOOL MoveFile( LPCTSTR lpexistingfilename, LPCTSTR lpnewfilename, 기존파일이름 복사된파일이름 디렉토리에대해서도가능함. 이름바꾸기도가능 17
하드링크 BOOL CreateHardLink( LPCTSTR lpfilename, LPCTSTR lpexistingfilename, 새파일이름 기존파일이름 LPSECURITY_ATTRIBUTES lpsecurityattributes 보안 하드링크 파일하나에여러개이름부여 18
심볼릭링크 BOOLEAN CreateSymbolicLink( LPTSTR lpsymlinkfilename, LPTSTR lptargetfilename, DWORD dwflags 새파일이름 기존파일이름 파일 / 디렉토리플래그 lptargetfilename 이 file 이면 dwflags 에 0 lptargetfilename 이 directory 이면 dwflags 에 SYMBOLIC_LINK_FLAG_DIRECTORY 19
파일크기얻기 BOOL GetFileSizeEx( HANDLE hfile, PLARGE_INTEGER lpfilesize 파일핸들 파일크기 (64bit) 20
파일시간얻기 BOOL GetFileTime( HANDLE hfile, LPFILETIME lpcreationtime, LPFILETIME lplastaccesstime, LPFILETIME lplastwritetime 파일핸들생성시간 (64bit) 마지막접근시간 (64bit) 마지막수정시간 (64bit) 21
파일시간얻기 22
시간관련함수 FileTimeToSystemTime 파일시간 시스템시간 ( 년, 월, 일, 시, 분, 초, 밀리초 ) SystemTimeToFileTime 시스템시간 파일시간 (64bit 무부호정수형 ) CompareFileTime 두시간의비교 (1 st 가작으면 (-1), 같으면 (0), 크면 (+1) ) SetFileTime 파일의시간변경할때 23
파일특성얻기 / 설정 DWORD GetFileAttributes( LPCTSTR lpfilename BOOL SetFileAttributes( LPCTSTR lpfilename, DWORD dwfileattributes GetFileAttributes의반환값 SetFileAttributes의설정값 (OR연산) FILE_ATTRIBUTE_HIDDEN FILE_ATTRIBUTE_DIRECTORY FILE_ATTRIBUTE_ENCRYPTED FILE_ATTRIBUTE_NORMAL FILE_ATTRIBUTE_READONLY 24
25
파일특성과디렉토리처리 (1) 디렉토리에서 주어진이름패턴을맊족하는파일 / 디렉토리얻기 그파일특성얻기 관련함수 FindFirstFile FindNextFile FindClose typedef struct _WIN32_FIND_DATA { DWORD dwfileattributes; FILETIME ftcreationtime; FILETIME ftlastaccesstime; FILETIME ftlastwritetime; DWORD nfilesizehigh; DWORD nfilesizelow; DWORD dwreserved0; DWORD dwreserved1; TCHAR cfilename[max_path]; TCHAR calternatefilename[14]; } WIN32_FIND_DATA 26
파일특성과디렉토리처리 (2) WIN32_FIND_DATA 구조체 typedef struct _WIN32_FIND_DATA { DWORD dwfileattributes; FILETIME ftcreationtime; FILETIME ftlastaccesstime; FILETIME ftlastwritetime; DWORD nfilesizehigh; DWORD nfilesizelow; 파일특성생성시간 (64bit) 마지막접근시간 (64bit) 마지막수정시간 (64bit) 파일크기 DWORD DWORD dwreserved0; dwreserved1; TCHAR cfilename[max_path]; TCHAR calternatefilename[14]; } WIN32_FIND_DATA 27
파일특성과디렉토리처리 (3) HANDLE FindFirstFile( 패턴에부합하는디렉토리 / 파일을찾고검색 HANDLE을반환 LPCTSTR lpfilename, 검색패턴 LPWIN32_FIND_DATA lpfindfiledata 검색된파일의정보 BOOL FindNextFile( FindFirstFile 조건으로검색을계속한다. HANDLE hfindfile, FindFirstFile의반환HANDLE LPWIN32_FIND_DATA lpfindfiledata 검색된파일의정보 BOOL FindClose( FindFirstFile의반환 HANDLE을닫는다 HANDLE hfindfile FindFirstFile의반환HANDLE 28
디렉토리생성 / 삭제 BOOL CreateDirectory( LPCTSTR lppathname, 경로이름 LPSECURITY_ATTRIBUTES lpsecurityattributes 보안 BOOL RemoveDirectory( LPCTSTR lppathname 경로이름 29
디렉토리경로설정 / 얻기 BOOL SetCurrentDirectory( LPCTSTR lppathname 경로이름 DWORD GetCurrentDirectory( DWORD nbufferlength, LPTSTR lpbuffer 버퍼길이 경로버퍼 30