프로그래밍 언어/Win32

Win32 파일입출력

원원 2023. 7. 23. 20:42

안녕하세요. 오늘은 Win32로 파일입출력을 해보겠습니다

파일입출력을 할때 함수 4개만 사용하면 됩니다. 파일을 프로그램과 연결하는 CreateFile, 파일을 읽는 ReadFile, 파일을 쓰는 WriteFile, 파일을 닫는 CloseHandle 이렇게 4가지입니다.

 

* CreateFile 함수
HANDLE CreateFile(
  [in]           LPCSTR                lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile
);

lpFileName : 파일의 경로와 읽을 파일명을 적으면 됩니다. 실행파일과 같은 폴더에 있다면 파일의 이름을 적고 다른 경로에 있다면 경로와 이름을 적어줍니다.
dwDesiredAccess : 파일에대한 권한으로 읽기,쓰기, 읽기+쓰기 설정이 가능합니다. (GENERIC_READ, GENERIC_WRITE,GENERIC_READ|GENERIC_WRITE 설정)
dwShareMode : 파일의 공유설정입니다. 예를들어 읽기공유를 하지 않고 해당파일을 열었을때 아래와처럼 뜹니다. (0, FILE_SHARE_READ , FILE_SHARE_WRITE , FILE_SHARE_DELETE 설정)

lpSecurityAttributes : 보안속성입니다.
dwCreationDisposition : 파일 생성 모드입니다. 옵션에 따라서 파일의 상태에 따라서 동작가능합니다.
dwFlagsAndAttributes : 생성되는 파일의 속성입니다. 
hTemplateFile : 권한관련 옵션입니다.

참고 : https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-createfilea

 

*ReadFile 함수
BOOL ReadFile(
  [in]                HANDLE       hFile,
  [out]               LPVOID       lpBuffer,
  [in]                DWORD        nNumberOfBytesToRead,
  [out, optional]     LPDWORD      lpNumberOfBytesRead,
  [in, out, optional] LPOVERLAPPED lpOverlapped
);
hFile : 읽을 핸들입니다. 
lpBuffer : 파일에서 읽은 내용을 저장할 변수입니다.
nNumberOfBytesToRead : 읽을 바이트수입니다.  
lpNumberOfBytesRead : 실제로 읽어들인 바이트의 수입니다. 
lpOverlapped : ?

예를들어 파일의 내용이 "12345"이고 nNumberOfBytesToRead =2를 하고 ReadFile을 호출하면 lpNumberOfBytesRead =2가 됩니다. 

*WrtieFile함수
BOOL WriteFile(
  [in]                HANDLE       hFile,
  [in]                LPCVOID      lpBuffer,
  [in]                DWORD        nNumberOfBytesToWrite,
  [out, optional]     LPDWORD      lpNumberOfBytesWritten,
  [in, out, optional] LPOVERLAPPED lpOverlapped
);
hFile : 읽을 핸들입니다. 
lpBuffer : 파일에 Write할 내용을 저장할 변수입니다.
nNumberOfBytesToRead : 파일에 쓸 바이트의 수입니다.
lpNumberOfBytesRead : 실제로 쓴 바이트의 수입니다.
lpOverlapped : ?


*CloseHandle
파일을 다 사용하고 파일을 닫을때 사용합니다


이제 프로그램에서 키보드입력으로 입력받은 내용을 파일에 저장하고, 프로그램을 새로 킬때 파일에 저장한 내용을 출력하는 코드를 알아보겠습니다.

(저장)

(읽기)


소스코드

https://github.com/yhunterr/Win32/tree/main/win32_file_write_read/WindowsProject1

'프로그래밍 언어 > Win32' 카테고리의 다른 글

Win32 문자집합 설정  (0) 2023.07.23