Vienna
Chapter 18) 파일 I/O와 디렉터리 컨트롤 - 파일 열기/닫기/읽기/쓰기 본문
책에서 권장하는 대로 18장의 CraeteFile/ReadFile/WriteFile 함수를 먼저 배우기로 했다.
◇ 파일 열기 & 닫기
HANDLE CreateFile(
LPCTSTR lpFileName, // 1
DWORD dwDesiredAccess, //2
DWORD dwShareMode, //3
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 4
DWORD dwCreationDisposition, // 5
DWORD dwFlagsAndAttributes, //6
HANDLE hTemplateFile // 7
);
// If the function filas, the return valus is INVALID_HANDLE_VALUE. // 8
lpFileName | Open할 파일 이름 지정 | |
dwDesiredAccess | 읽기/쓰기 모드 지정 | |
GENERIC_READ | 읽기 모드 지정 | |
GENERIC_WRITE | 쓰기 모드 지정 | |
dwShareMode | 파일 공유방식을 지정 | |
0 | 다른 프로세스에 절대 공유 불가! 중복 개방 불가. | |
FILE_SHARE_READ | 다른 프로세스에서 이 파일에 동시 읽기 접근 가능. | |
FILE_SHARE_WRITE | 다른 프로세스에서 이 파일에 동시 쓰기 접근 가능. | |
lpSecurityAttributes | 보안 속성을 지정 | |
dwCreationDisposition | 파일이 생성되는 방법을 지정 | |
CREATE_ALWAYS | 항상 새 파일 생성 | |
CREATE_NEW | 새 파일 생성. 같은 이름의 파일이 존재하면 생성 실패! | |
OPEN_ALWAYS | 기존 파일 개방. 없으면 새로 생성 | |
OPEN_EXISTING | 기존 파일 개방. 존재하지 않으면 함수 호출 실패! | |
TRUNCATE_EXISTING | 기존 파일의 내용 지우고 개방. 파일이 존재하지 않으면 호출 실패! | |
dwFlagsAndAttributes | 파일의 특성 정보를 설정. | |
hTemplateFile | 기존에 존재하는 파일과 동일한 특성을 가지는 새 파일을 만들 때 사용되는 전달 인자 |
◇ 파일 읽기 & 쓰기와 포인터
BOOL ReadFile(
HANDLE hFile, // 1
LPVOID lpBuffer, // 2
DWORD nNumberOfBytesToRead, // 3
LPDWORD lpNumberOfBytesRead, //4
LPOVERLAPPED lpOverlapped //5
);
// If the function filas the return value is 0
hFile | 데이터를 읽을 파일의 핸들을 지정 |
lpBuffer | 읽어 들인 데이터를 저장할 버퍼의 주소를 지정 |
nNumberOfBytesToRead | 파일로부터 읽고자하는 데이터의 크기를 바이트 단위로 지정 |
lpNumebrOfBytesRead | 실제 읽어 들인 데이터 크기를 얻기 위한 변수의 주소를 지정 |
lpOverlapped |
BOOL WrtieFile(
HANDLE hFile, // 1
LPCVOID lpBuffer, // 2
DWORD nNumberOfBytesToWrite, // 3
LPDWORD lpNumberOfBytesWritten, // 4
LPOVERLAPPED lpOverlapped // 5
);
// If the function fails, the return value is zero.
hFile | 데이터를 저장할 파일의 핸들을 지정 |
lpBuffer | 데이터를 저장하고 있는 버퍼의 주소를 지정 |
nNumberOfBytesToRead | 파일에 저장하고자 하는 데이터 크기를 바이트 단위로 지정 |
lpNumebrOfBytesRead | 파일에 실제 저장된 데이터 크기를 얻기 위해 변수의 주소를 지정 |
lpOverlapped |
/*
* UNICODE_BASE_FILE_IO.cpp
*
* 프로그램 설명: 유니코드 기반의 파일 출력
*/
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR* argv[])
{
TCHAR fileName[] = _T("data.txt");
TCHAR fileData[] = _T("Just test string~");
HANDLE hFile = CreateFile(fileName, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile == INVALID_HANDLE_VALUE) {
_tprintf(_T("File creation fault!"));
return -1;
}
DWORD numOfBytesWritten = 0;
WriteFile(hFile, fileData, sizeof(fileData), &numOfBytesWritten);
CloseHandle(hFile);
return 0;
}
/*
* UNICODE_BASE_FILE_READ.cpp
*
* 프로그램 설명: 유니코드 기반의 파일 입력
*/
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#define STRING_LEN 100
int _tmain(int argc, TCHAR* argv[])
{
TCHAR fileName[] = _T("data.txt");
TCHAR fileData[STRING_LEN];
HANDLE hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile == INVALID_HANDLE_VALUE) {
_tprintf(_T("File open fault!\n"));
return -1;
}
DWORD numOfByteRead = 0;
ReadFile(hFile, fileData, sizeof(fileData), &numOfByteRead, NULL);
fileData[numOfByteRead / sizeof(TCHAR)] = 0;
_tprintf(_T("Read data size: %u\n"), numOfByteRead);
_tprintf(_T("Read string: %s\n"), fileData);
CloseHandle(hFile);
return 0;
}
'그외 > 뇌를 자극하는 윈도우즈 시스템 프로그래밍' 카테고리의 다른 글
Chapter 7) 프로세스 간 통신(IPC) 1 - 메일슬롯 방식의 IPC (0) | 2023.04.19 |
---|---|
Chapter 7) 프로세스 간 통신(IPC) 1 - IPC의 의미 (0) | 2023.04.18 |
Chapter 6) 커널 오브젝트와 오브젝트 핸들 - 커널 오브젝트에 대한 이해 (0) | 2023.04.16 |
Chapter 5) 프로세스 생성과 소멸 - 프로세스의 스케줄링과 상태 변화 (1) | 2023.04.15 |
Chapter 5) 프로세스 생성과 소멸 - 프로세스의 이해 (0) | 2023.04.15 |
Comments