IT공부/IT서적

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 18장. 파일 I/O와 디렉터리 컨트롤

shine94 2025. 2. 27. 21:15

* 해당 글은 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 도서를 읽고 정리한 글입니다

   https://product.kyobobook.co.kr/detail/S000001223395

 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 | 윤성우 - 교보문고

뇌를 자극하는 윈도우즈 시스템 프로그래밍 |

product.kyobobook.co.kr

 

https://www.inflearn.com/course/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/dashboard

 

[지금 무료]뇌를 자극하는 윈도우즈 시스템 프로그래밍 강의 | 한빛미디어 - 인프런

한빛미디어 | , [사진] 1. 강좌 소개 한빛미디어(주) 에서 발간한 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 의 저자 윤성우 님이 직접 강의하는 온라인 강좌입니다. 이미 여러 저서와 온라인

www.inflearn.com

 

 

 

 

CreateFile 함수 - 파일 열기

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

 

CreateFileA 함수(fileapi.h) - Win32 apps

파일 또는 I/O 디바이스를 만들거나 엽니다. 가장 일반적으로 사용되는 I/O 디바이스는 다음과 같습니다. \_file, 파일 스트림, 디렉터리, 실제 디스크, 볼륨, 콘솔 버퍼, 테이프 드라이브, 통신 리소

learn.microsoft.com

 

* CloseHandle 함수 - 파일 종료

 

* ReadFile 함수 - 파일 읽기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-readfile

 

ReadFile 함수(fileapi.h) - Win32 apps

지정된 파일 또는 I/O(입출력) 디바이스에서 데이터를 읽습니다. 읽기는 디바이스에서 지원하는 경우 파일 포인터로 지정된 위치에서 발생합니다.

learn.microsoft.com

 

(+) 파일 읽고 난 뒤 메모리 상태 확인

 

* WriteFile 함수 - 파일 쓰기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-writefile

 

WriteFile 함수(fileapi.h) - Win32 apps

지정된 파일 또는 I/O(입출력) 디바이스에 데이터를 씁니다.

learn.microsoft.com

 

* GetFileTime 함수 - 파일의 시간 정보 얻어오기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getfiletime

 

GetFileTime 함수(fileapi.h) - Win32 apps

파일 또는 디렉터리를 만들고, 마지막으로 액세스하고, 마지막으로 수정한 날짜와 시간을 검색합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/timezoneapi/nf-timezoneapi-filetimetosystemtime

 

FileTimeToSystemTime 함수(timezoneapi.h) - Win32 apps

파일 시간을 시스템 시간 형식으로 변환합니다. 시스템 시간은 UTC(협정 세계시)를 기준으로 합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/timezoneapi/nf-timezoneapi-systemtimetotzspecificlocaltime

 

SystemTimeToTzSpecificLocalTime 함수(timezoneapi.h) - Win32 apps

UTC(협정 세계시)의 시간을 지정된 표준 시간대의 해당 현지 시간으로 변환합니다.

learn.microsoft.com

 

* GetFileSize 함수 - 파일 사이즈 얻어오기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getfilesize

 

GetFileSize 함수(fileapi.h) - Win32 apps

지정된 파일의 크기(바이트)를 검색합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getfilesizeex

 

GetFileSizeEx 함수(fileapi.h) - Win32 apps

지정된 파일의 크기를 검색합니다.

learn.microsoft.com

 

* GetFileAttributes 함수 - 파일의 특성(Attribute) 정보 얻어오기, SetFileAttributes 함수 - 파일의 특성(Attribute) 세팅하기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getfileattributesa

 

GetFileAttributesA 함수(fileapi.h) - Win32 apps

지정된 파일 또는 디렉터리에 대한 파일 시스템 특성을 검색합니다. (ANSI)

learn.microsoft.com

 

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-setfileattributesa

 

SetFileAttributesA 함수(fileapi.h) - Win32 apps

파일 또는 디렉터리의 특성을 설정합니다. (ANSI)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/fileio/file-attribute-constants

 

 

파일 특성 상수(WinNT.h) - Win32 apps

파일 특성은 디스크의 파일 시스템에 의해 저장된 메타데이터 값이며 시스템에서 사용되고 다양한 파일 I/O API를 통해 개발자가 사용할 수 있습니다.

learn.microsoft.com

 

* GetFileInformationByHandle 함수 - 파일의 특성(Attribute) 정보 핸들로부터 얻어오기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getfileinformationbyhandle

 

GetFileInformationByHandle 함수(fileapi.h) - Win32 apps

지정된 파일의 파일 정보를 검색합니다. (GetFileInformationByHandle)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/ns-fileapi-by_handle_file_information

 

BY_HANDLE_FILE_INFORMATION(fileapi.h) - Win32 apps

GetFileInformationByHandle 함수가 검색하는 정보를 포함합니다.

learn.microsoft.com

 

(1) DWORD nFileSizeHigh;

   파일 크기의 상위 32비트

 

(2) DWORD nFileSizeLow;

   파일 크기의 하위 32비트

 

(3) 64비트 파일 크기 계산 방법

ULONGLONG fileSize = ((ULONGLONG)fileInfo.nFileSizeHigh << 32) | fileInfo.nFileSizeLow;

ㄴ nFileSizeHigh를 상위 32비트로 이동(<< 32)

ㄴ nFileSizeLow를 하위 32비트로 그대로 유지

ㄴ | 연산을 사용해 두 개의 32비트 값을 64비트로 합침

 

* GetFullPathName 함수 - 파일의 경로(Path) 정보 얻어오기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getfullpathnamea

 

GetFullPathNameA 함수(fileapi.h) - Win32 apps

지정된 파일의 전체 경로 및 파일 이름을 검색합니다. (ANSI)

learn.microsoft.com

 

* SetFilePointer 함수 - 파일 포인터 이동

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-setfilepointer

 

SetFilePointer 함수(fileapi.h) - Win32 apps

지정된 파일의 파일 포인터를 이동합니다. (SetFilePointer)

learn.microsoft.com

 

(1) 32비트 기반

 - 오류 검사 코드

if (dwPtr == INVALID_SET_FILE_POINTER)
{
	// 오류 처리
}

- lDistanceToMove : 이동시킬 거리를 지정

- lDistanceToMoveHigh : 무조건 NULL 전달, 상위 4바이트 정보이기 때문에 32비트에서는 의미 없음

 

(2) 64비트 기반

- 오류 검사 코드

if ((dwPtrLow == INVALID_SET_FILE_POINTER) && (GetLastError() != NO_ERROR))
{
	// 오류 처리
}

- lDistanceToMove : 이동시킬 거리를 지정, 하위 4바이트 정보를 표현

- lDistanceToMoveHigh : 상위 4바이트 정보를 표현

 

* CreateDirectory 함수 - 디렉터리 생성

https://learn.microsoft.com/ko-kr/windows/win32/api/winbase/nf-winbase-createdirectory

 

CreateDirectory 함수(winbase.h) - Win32 apps

CreateDirectory 함수(winbase.h)는 새 디렉터리를 만듭니다.

learn.microsoft.com

 

* RemoveDirectory 함수 - 디렉터리 소멸

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-removedirectorya

 

RemoveDirectoryA 함수(fileapi.h) - Win32 apps

기존 빈 디렉터리를 삭제합니다. (ANSI)

learn.microsoft.com

 

* GetCurrentDirectory 함수 - 현재 디렉터리 검색, SetCurrentDirectory 함수 - 현재 디렉터리 변경

https://learn.microsoft.com/ko-kr/windows/win32/api/winbase/nf-winbase-getcurrentdirectory

 

GetCurrentDirectory 함수(winbase.h) - Win32 apps

현재 프로세스의 현재 디렉터리를 검색합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/winbase/nf-winbase-setcurrentdirectory

 

SetCurrentDirectory 함수(winbase.h) - Win32 apps

현재 프로세스의 현재 디렉터리를 변경합니다.

learn.microsoft.com

현재 디렉터리(Current Directory)

   프로그램이 로드(Load)된 디렉터리(즉, 실행파일이 존재하는 디렉터리)

   초기에는 프로그램이 로드(Load)된 디렉터리로 설정되며, 이후 변경 가능

 

* GetSystemDirectory 함수 - 시스템 디렉터리 경로 검색, GetWindowsDirectory 함수 - Windows 디렉터리 경로 검색

https://learn.microsoft.com/ko-kr/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemdirectoryw

 

GetSystemDirectoryW 함수(sysinfoapi.h) - Win32 apps

시스템 디렉터리의 경로를 검색합니다. (유니코드)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectoryw

 

GetWindowsDirectoryW 함수(sysinfoapi.h) - Win32 apps

Windows 디렉터리의 경로를 검색합니다. (유니코드)

learn.microsoft.com

시스템 디렉터리

   각종 라이브러리(DLL) 및 드라이브 파일처럼 Windows 시스템에 중요한 파일들이 존재하는 위치

   현재 디렉터리와 달리 변경 불가

Windows 디렉터리(시스템 디렉터리 포함)

   초기화 및 실행파일들이 존재하는 위치 → Windows가 부팅되고 실행되기 위해 필요한 모든 파일들이 위치하는 곳

   현재 디렉터리와 달리 변경 불가

 

* Windows에서 드라이버(driver)는 하드웨어 장치와 운영체제(OS) 간의 통신을 담당하는 소프트웨어를 의미한다

   ㄴ 드라이버 (.sys): 하드웨어와 직접 연결되는 OS 구성 요소

   ㄴ DLL (.dll): 여러 프로그램이 공통적으로 사용하는 코드 라이브러리

 

   (+) 예를 들어, kernel32.dll은 시스템 호출을 지원하지만, 하드웨어를 직접 제어하는 드라이버는 아님

 

https://shine94.tistory.com/403

 

[운영체제] 시스템 콜(System Call)

* 시스템 콜(System Call)   사용자 모드에서 운영체제(OS)의 커널의 기능을 요청할 수 있도록 제공되는 인터페이스   (예) 운영체제(OS)의 API          ㄴ 유저는 시스템 콜을 사용하여 OS에 요청을

shine94.tistory.com

 

* SearchPath 함수 - 지정된 경로에서 지정된 파일 검색

https://learn.microsoft.com/ko-kr/windows/win32/api/processenv/nf-processenv-searchpatha

 

SearchPathA 함수 - Win32 apps

지정된 경로에서 지정된 파일을 검색합니다. (ANSI)

learn.microsoft.com

 

(+) lpPath 값이 NULL이 전달되면, 표준 검색 경로와 같은 순서로 파일을 찾게 된다

   ① 실행 중인 프로그램이 로드(Load)된 디렉터리

   ② 현재 디렉터리

   ③ 시스템 디렉터리

   ④ Windows 디렉터리

   ⑤ 환경변수 PATH에 등록된 디렉터리

 

FindFirstFile 함수, FindNextFile 함수, FindClose 함수 - 디렉터리에서 파일 찾기

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-findfirstfilea

 

FindFirstFileA 함수(fileapi.h) - Win32 apps

디렉터리에서 특정 이름과 일치하는 이름으로 파일 또는 하위 디렉터리를 검색합니다(또는 와일드카드를 사용하는 경우 부분 이름). (ANSI)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-findnextfilea

 

FindNextFileA 함수(fileapi.h) - Win32 apps

FindFirstFile, FindFirstFileEx 또는 FindFirstFileTransacted 함수에 대한 이전 호출에서 파일 검색을 계속합니다. (ANSI)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-findclose

 

FindClose 함수(fileapi.h) - Win32 apps

FindFirstFile, FindFirstFileEx, FindFirstFileNameW, FindFirstFileNameTransactedW, FindFirstFileTransacted, FindFirstStreamTransactedW 또는 FindFirstStreamW 함수가 연 파일 검색 핸들을 닫습니다.

learn.microsoft.com