Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 방탈출
- 방탈출 추천
- 정렬 알고리즘
- 2021 방탈출 추천
- 시스템 프로그래밍
- 윈도우 프로그래밍
- 공포 방탈출
- 유니티
- 홍대 덤앤더머
- 방탈출 후기
- 필활
- 꽃길
- C++ 자료구조
- C 자료구조
- 방탈출 리뷰
- Android
- PC VR
- 추천
- 넥스트에디션
- 홍대
- 홍대 방탈출
- 넥스트에디션 2호점
- 강남 방탈출
- 후기
- 이스케이퍼스 2호점
- 개발
- C#
- 홍대 방탈출 추천
- 이스케이퍼스
- Unity
Archives
- Today
- Total
행복한 연어의 이야기
(윈도우 시스템) 18. 파일 I/O와 디렉터리 컨트롤 본문
1. 기본적인 파일 처리 함수들
파일 열기 & 닫기
HANDLE CreateFile(
LPCTSTR lpFileName, //파일 이름
DWORD dwDesiredAccess, //읽기 쓰기 모드 지정
DWORD dwShareMode, //파일 공유방식
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //핸들을 상속하기 위한 용도
DWORD dwCreationDisposition, //파일 생성 방법
DWORD dwFlagsAndAttributes, //파일 특성 정보
HANDLE hTemplateFile //기존에 존재하는 파일 특성 전달자
);
BOOL CloseHandle(
HANDLE hObject
);
파일 읽기 & 쓰기
BOOL ReadFile(
HANDLE hfile //읽을 파일의 핸들
LPCVOID lpBuffer //읽은 데이터를 저장할 버퍼주소
DWORD nNumberOfBytesToWrite //데이터 크기(바이트 단위)
LPDWORD lpNumberOfBytesWritten //함수호출 완료후 실제 데이터를 얻기위한 변수 주소
LPOVERLAPPED lpOverlapped
);
BOOL WriteFile(
HANDLE hfile //데이터를 저장할 파일의 핸들
LPCVOID lpBuffer //데이터를 저장하고 있는 버퍼
DWORD nNumberOfBytesToWrite //데이터 크기(바이트 단위)
LPDWORD lpNumberOfBytesWritten //함수호출 완료후 실제 데이터를 얻기위한 변수 주소
LPOVERLAPPED lpOverlapped
);
파일 사이즈 얻어오기
DWORD GetFileSize(
HANDLE hfile, //파일 핸들
LPDWORD lpFileSizeHigh //반환값이 DWORD 이기 때문에 4바이트 이상 파일을 읽을때 사용
);
BOOL GetFileSizeEX(
HANDLE hfile, //파일 핸들
PLARGE_INTEGER lpFileSize //파일 크기를 저장하기 위한 변수의 포인터(주소값)
);
4 기가 바이트 이상 데이터의 사이즈를 얻기 위해서 GetFileSize 의 두번째 인자를 사용하거나
(상위 4바이트 정보를 가져온다.)
GetFileSizeEx 함수를 사용할 수 있다.
파일 특성 정보 얻기 & 적용하기
DWORD GetFileAttributes(
LPCTSTR lpFIleName //파일 이름
);
BOOL SetFileAttributes(
LPCTSTR lpFileName, //파일 이름
DWORD dwFileAttributes //변경할 특성 정보
);
BOOL GetFileInformationByHandle(
HANDLE hfile, //파일 핸들
LPBY_HANDLE_FILE_INFORMATION lpFileInformation //파일 정보 구조체의 포인터 타입
);
위 함수 2개는 파일 이름을 사용해서 특성 정보를 얻어오소
제일 아래 함수는 파일 핸들을 통해 파일 정보를 가져온다.
파일 경로 정보 얻어오기
GetFullPathNameW(
LPCWSTR lpFileName, //완전경로를 확인할 파일 이름
DWORD nBufferLength, //완전경로를 저장할 버퍼 길이(문자열 길이)
LPWSTR lpBuffer, //완전경로를 저장할 버퍼의 주소값
LPWSTR* lpFilePart //파일 이름이 반환
);
2. 디렉터리 관련 함수 및 그밖의 함수들
디텍터리 종류
현재 디렉터리
초기에는 프로그램이 로드된 디렉터리이며 이후 (프로그램 실행중에) 변경 가능하다.
시스템 디렉터리
각종 라이브러리(DLL) 및 드라이버 파일 처럼 Windows 시스템에 중요한 파일들이 존재한다. 변경 불가능 하다.
Window 디렉터리
초기화 및 실행파일이 존재한다. 변경 불가능 하다.
디렉터리 생성과 소멸
BOOL CreateDirectory(
LPCTSTR lpPathName, //생성하고자 하는 디렉터리 이름
LPSECURITY_ATTRIBUTES lpSecurityAttributes //보안속성 설정
);
BOOL RemoveDirectory(
LPCTSTR lpPathName //지울 디렉토리 이름
);
현재 디렉터리 얻기 & 변경하기
DWROD GetCurrentDirectory(
DWORD nBufferLenth, //두번째 인자로 전달된 버퍼의 길이
LPTSTR lpBuffer //현재 디렉터리 정보를 저장할 버퍼의 주소값
);
BOOL SetCurrentDirectory(
LPCSTR lpPathName //변경하고자 하는 현재 디렉터리 정보를 지정
);
시스템 디렉터리 & Windows 디렉터리 얻기
UNIT GetSystemDirectory(
LPTST lpBuffer, //시스템 디렉터리 정보를 저장할 버퍼의 주소값
UNIT uSize //첫 번째 인자로 전달된 버퍼의 길이
);
UNIT GetWindowsDirectory(
LPTST lpBuffer, //WIndows 디렉터리 정보를 저장할 버퍼의 주소값
UNIT uSize //첫 번째 인자로 전달된 버퍼의 길이
);
디렉터리에서 파일 찾기
DWORD SearchPathW(
LPCWSTR lpPath, //대상의 경로
LPCWSTR lpFileName, //찾을 파일 이름
LPCWSTR lpExtension, //파일의 확장자
DWORD nBufferLength, //완전경로명을 저장할 버퍼의 길이
LPWSTR lpBuffer, //완전경로명을 저장할 버퍼
LPWSTR* lpFilePart //파일 이름을 얻을 주소값
);
첫번째 인자 대상의 경로에 NULL 이 오게 되면 다음과 같은 순서로 파일을 찾는다.
다음 순서를 표준 검색경로라고 한다.
1. 실행중인 프로그램이 로드된 디렉터리(실행파일이 존재하는 디렉터리)
2. 현재 디렉터리
3. 시스템 디렉터리
4. Windows 디렉터리
5. 환경변수 PATH 에 등록된 디렉터리
알고 넘어가야할 것
1. 데이터 입력과 출력
2. 4G 바이트 이상 대용량 파일 처리
3. 표준 검색경로
4. 어떤 기능들이 제공되는지
'윤성우 저자'님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 보고 정리한 내용입니다.
'IT > 윈도우 시스템 프로그래밍' 카테고리의 다른 글
(윈도우 시스템) 20. 메모리 관리 (0) | 2021.08.30 |
---|---|
(윈도우 시스템) 19. 비동기 I/O와 APC (0) | 2021.08.27 |
(윈도우 시스템) 17. 구조적 예외처리(SEH) 기법 (0) | 2021.08.23 |
(윈도우 시스템) 16. 컴퓨터 구조 네번째 (0) | 2021.08.20 |
(윈도우 시스템) 14. 쓰레드 동기화 기법 2 (실행순서의 동기화) (0) | 2021.08.18 |
Comments