WIN32 API- 파일의 입출력(ReadFile)/(WriteFile)
2. ReadFile( )
// 파일로부터 데이터를 읽어오는 함수
BOOL ReadFile (
HANDLE hFile, // 읽으려는 파일의 핸들
LPVOID lpBuffer, // 읽어 온 데이터를 저장할 버퍼의 포인터
DWORD nNumberOfBytesToRead, // 읽으려는 바이트의 수
LPDWORD lpNumberOfBytesRead, // 실제로 읽은 바이트 수를 반환 받기 위한 출력용 인수
LPOVERLAPPED lpOverlapped // 비동기 입출력을 위한 OVERLAPPED 구조체의 포인터 (비동기 사용X -> NULL)
);
#예제1 - 파일의 맨 처음부터 읽기.
- test.txt 파일을 없으면 만들고, 있으면 덮어씌워서라도 열어라.
- 읽기 위해서
- 딴놈이 읽는 것까지는 허용
- 일반 파일 속성
- 함수 사용 예제
DWORD rbytes; // 실제로 읽은 바이트 수를 반환받기 위한 출력용 인수 선언
char buff[100]; // 읽어 온 데이터를 저장할 버퍼의 포인터 선언
HANDLE hFile = CreateFile("test.txt",GENERIC_READ, FILE_SHARE_READ,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
ReadFile(hFile, buff, sizeof(buff), &rbytes, NULL);
# 예제2 - 원하는 위치부터 읽기
- 파일의 첫부분에서 100바이트 뒤부터 읽기
- 함수 사용 예제
DWORD rbytes; // 실제로 읽은 바이트 수를 반환하기 위한 출력용 인수
char buff[100]; // 읽어 온 데이터를 저장할 버퍼의 포인터 선언
HANDLE hFile = CreateFile("test.txt",GENERIC_READ, FILE_SHARE_READ,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer(hFile, 100, NULL, FILE_BEGIN);
ReadFile(hFile, buff, sizeof(buff), &rbytes, NULL);
3. WriteFile( )
// 파일에 데이터를 쓰는 함수
* 함수 원형
BOOL WriteFile(
HANDLE hFile, // 쓰려는 파일의 핸들
LPCVOID lpBuffer, // 데이터를 쓰기 위해 할당된 버퍼의 포인터
DWORD nNumberOfBytesToWrite, // 쓰려는 바이트 수
LPDWORD lpNumberOfBytesWritten, // 실제로 쓴 바이트 수를 반환 받기 위한 출력용 인수
LPOVERLAPPED lpOverlapped // 비동기 입출력을 위한 OVERLAPPED 구조체의 포인터(비동기 사용X -> NULL)
);
// 파일 포인터가 가리키고 있는 지점부터 데이터를 저장하며, 기록이 끝나면 실제 기록한 바이트 수만큼 파일 포인터를 이동해준다.