WIN32 API

WIN32 API- 파일의 입출력(ReadFile)/(WriteFile)

야생타조 2018. 12. 6. 02:56

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)

);


// 파일 포인터가 가리키고 있는 지점부터 데이터를 저장하며, 기록이 끝나면 실제 기록한 바이트 수만큼 파일 포인터를 이동해준다.