Total

FindFirstFile

2015. 3. 12. 15:29

지정된 이름(또는 와일드카드 문자를 사용하는 경우 부분 이름)과 일치하는 이름을 가진 파일 또는 하위 디렉토리를 검색한다.

* 와일드카드 문자 : 여러 파일을 한번에 지정할 목적으로 사용하는 기호를 말한다.

 

 

- 출처 : MSDN

 

  • lpFileName

- 검색할 디렉토리 또는 경로를 지정한다.

- 별표(*), 물음표(?)와 같은 와일드카드 문자를 사용할 수 있다.

 

  • lpFindFileData

- 검색의 결과를 저장 할 WIN32_FIND_DATA 구조체 변수의 주소를 전달한다.

 

 

Return value : 성공 시 FindNextFile 또는 FindClose에 대한 후속 호출에 사용 할 검색 핸들이며 lpFindFileData에 발견 된 첫 번째 파일이나 디렉토리에 대한 정보가 포함되어 있고, 실패 시 INVALID_HANDLE_VALUE(-1)가 반환된다. 실패에 대한 자세한 정보는 GetLastError 함수를 참고한다.

 

Header : FileAPI.h(include Windows.h)

 

DLL : Kernel32.dll

'Win32 API' 카테고리의 다른 글

FindClose  (0) 2015.03.12
FindNextFile  (0) 2015.03.12
DeleteFile  (0) 2015.03.11
MoveFile  (0) 2015.03.11
CopyFile  (0) 2015.03.11

DeleteFile

2015. 3. 11. 19:46

지정한 파일을 삭제한다.



- 출처 : MSDN


  • lpFileName

- 삭제 하고자 하는 파일의 이름이다.


Return value : 성공 시 0이 아닌 값을 반환하고, 실패 시 0을 반환한다. 실패에 대한 자세한 정보는 GetLastError 함수를 통해 확인할 수 있다.

 


Header : FileAPI.h(include Windows.h)


DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

FindNextFile  (0) 2015.03.12
FindFirstFile  (0) 2015.03.12
MoveFile  (0) 2015.03.11
CopyFile  (0) 2015.03.11
GetFileSize  (0) 2015.03.11

MoveFile

2015. 3. 11. 19:41

파일 또는 디렉토리를 이동 시킨다.

* 디렉토리의 경우 디렉토리 안의 파일 및 디렉토리도 포함하여 이동 시킨다. 



- 출처 : MSDN


  • lpExistingFileName

- 이동 시킬 파일 또는 디렉토리의 이름이다.

 

  • lpNewFileName

- 이동 후의 파일 또는 디렉토리의 이름이다.

- 이동 후 경로에 같은 이름의 파일 또는 디렉토리가 존재해서는 안 된다.


Return value : 성공 시 0이 아닌 값을 반환하고, 실패 시 0을 반환한다. 실패에 대한 자세한 정보는 GetLastError 함수를 통해 확인할 수 있다.

 


Header : WinBase.h(include Windows.h)


DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

FindFirstFile  (0) 2015.03.12
DeleteFile  (0) 2015.03.11
CopyFile  (0) 2015.03.11
GetFileSize  (0) 2015.03.11
SetFilePointer  (0) 2015.03.11

CopyFile

2015. 3. 11. 19:28

파일을 복사한다.



- 출처 : MSDN


  • lpExistingFileName

- 기존에 존재하는 복사 할 파일 이름이다.

 

  • lpNewFileName

- 복사 후 생성 될 파일 이름이다.

 

  • bFailIfExists

- 생성 될 파일이 이미 존재 하고 있을 시, 설정 값이 TRUE이면 함수는 실패를 반환하고 FALSE이면 기존 파일을 덮어쓴 후 성공을 반환한다.


Return value : 성공 시 0이 아닌 값을 반환하고, 실패 시에는 0을 반환한다. 실패에 대한 자세한 정보는 GetLastError 함수를 통해 확인할 수 있다.

 


Header : WinBase.h(include Windows.h)


DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

DeleteFile  (0) 2015.03.11
MoveFile  (0) 2015.03.11
GetFileSize  (0) 2015.03.11
SetFilePointer  (0) 2015.03.11
WriteFile  (0) 2015.03.11

GetFileSize

2015. 3. 11. 19:15

지정한 파일의 크기(Byte)를 구한다.



- 출처 : MSDN

  • hFile

- 파일의 크기를 구하고자 하는 파일의 핸들이다.

 

  • lpFileSizeHigh

- 파일의 크기가 큰 경우 파일의 크기가 입력 된다.(4Gbyte 이상)

- 파일의 크기가 크지 않다면 NULL을 사용한다.


Return value : 성공 시 파일 크기가 반환 되고, 실패 시 INVALID_FILE_SIZE(-1)이 반환 된다. 파일의 크기가 4Gbyte를 넘어 lpFileSizeHigh 파라메터를 사용 했다면 파일 크기 중 32bit 이하의 값은 반환 되고 32bit 이상의 값은 lpFileSizeHigh에 저장된다.

 


Header : FileAPI.h(include Windows.h)


DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

MoveFile  (0) 2015.03.11
CopyFile  (0) 2015.03.11
SetFilePointer  (0) 2015.03.11
WriteFile  (0) 2015.03.11
ReadFile  (0) 2015.03.11

SetFilePointer

2015. 3. 11. 19:07

지정한 파일의 파일 포인터를 이동 시킨다.



- 출처 : MSDN


  • hFile

- 파일 포인터를 이동 시키고자 하는 파일의 핸들이다.

 

  • lDistanceToMove

- 이동 시킬 파일 포인터의 크기이다.

 

  • lpDistanceToMoveHigh

파일의 크기가 4Gbyte를 넘는 경우 2번째 파라메터와 조합하여 이동 시킬 크기를 지정한다.

- 사용하지 않을 경우 NULL을 설정한다.


  • dwMoveMethod

파일 포인터의 시작을 지정한다.

- FILE_BEGIN : 파일의 시작 위치를 포인터의 기준으로 지정한다.

- FILE_CURRENT : 파일 포인터의 현재 위치를 기준으로 지정한다.

- FILE_END : 파일의 끝 위치를 포인터의 기준으로 지정한다.


Return value : 성공 시 새로운 파일 포인터를 반환 하고, 실패 시 INVALID_SET_FILE_POINTER를 반환 한다. 에러에 관한 자세한 정보는 GetLastError 함수를 참고 한다.

 


Header : FileAPI.h(include Windows.h)


DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

CopyFile  (0) 2015.03.11
GetFileSize  (0) 2015.03.11
WriteFile  (0) 2015.03.11
ReadFile  (0) 2015.03.11
CreateFile  (0) 2015.03.10

WriteFile

2015. 3. 11. 18:51

지정한 파일 또는 I/O 장치에 데이터를 기록 한다.

일반적으로 파일을 오픈한 경우 파일의 선두부터 기록하나 파일 포인터를 조작하면 원하는 위치 부터 데이터를 기록 할 수 있다.



- 출처 : MSDN


  • hFile

- 접근 하고자 하는 파일의 핸들이다.

 

  • lpBuffer

- 기록할 데이터가 저장 되어 있는 메모리의 시작 주소를 설정한다.

 

  • nNumberOfBytesToWrite

- 기록될 수 있는 최대 크기(Byte)값을 설정한다.

- 일반적으로 lpBuffer의 크기를 계산에 전달한다. 

 

  • lpNumberOfBytesWritten

- 함수 호출 후 실제 읽혀진 데이터의 크기를 저장 할 메모리의 주소를 전달한다.

 

  • lpOverlapped

- 비 동기 입출력을 위한 OVERLAPPED 구조체의 포인터이다.

- 일반적으로 NULL을 사용한다.


Return value : 성공 시 0이 아닌 값(TRUE)를 반환 하고, 실패 시 0(FALSE)를 반환 한다. 에러에 관한 자세한 정보는 GetLastError 함수를 참고 한다.

 


Header : FileAPI.h(include Windows.h)


DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

GetFileSize  (0) 2015.03.11
SetFilePointer  (0) 2015.03.11
ReadFile  (0) 2015.03.11
CreateFile  (0) 2015.03.10
TerminateProcess  (0) 2015.03.05

ReadFile

2015. 3. 11. 18:41

지정한 파일 또는 I/O 장치에서 데이터를 읽어 온다.

일반적으로 파일을 오픈한 경우 파일의 선두부터 읽어오나 파일 포인터를 조작하면 원하는 위치 부터의 데이터를 읽어 올 수 있다.



- 출처 : MSDN

  • hFile

- 접근 하고자 하는 파일의 핸들이다.


  • lpBuffer

- 읽어온 내용을 저장 할 메모리의 시작 주소를 설정한다.


  • nNumberOfBytesToRead

- 읽어 올 데이터의 최대 크기(Byte)를 설정한다.


  • lpNumberOfBytesRead

- 함수 호출 후 실제 읽혀진 데이터의 크기를 저장 할 메모리의 주소를 전달한다.


  • lpOverlapped

- 비 동기 입출력을 위한 OVERLAPPED 구조체의 포인터이다. 

- 일반적으로 NULL을 사용한다.



Return value : 성공 시 0이 아닌 값(TRUE)를 반환하고 실패 시 0(FALSE)를 반환한다. 에러에 관한 자세한 정보는 GetLastError 함수를 참고 한다.


Header : FileAPI.h(include Windows.h)


DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

SetFilePointer  (0) 2015.03.11
WriteFile  (0) 2015.03.11
CreateFile  (0) 2015.03.10
TerminateProcess  (0) 2015.03.05
ExitProcess  (0) 2015.03.05

CreateFile

2015. 3. 10. 17:06

파일 또는 I/O 장치를 생성 또는 오픈한다.

* I/O 장치 : file, file stream, directory, physical disk, volume, console buffer, tap drive, communications resource, mailslot, pipe 

 

 

- 출처 : MSDN

 

  • lpFileName

- 생성 또는 열기 위한 파일 또는 장치의 이름이다.

- 물리 드라이브 접근 시 : "\\.\PhysicalDrive0"

- 논리 드라이브 접근 시 : "\\.\C:"

 

  • dwDesiredAccess

- 읽기, 쓰기와 같은 접근의 목적을 설정 한다.

 

 

  • dwShareMode

- 공유 모드를 설정 한다.

 

 

  • lpSecurityAttributes

- 자식 프로세스에 대한 핸들 상속 여부를 지정 한다.

- 사용하지 않을 경우 NULL을 설정 한다.

 

  • dwCreationDisposition

- 파일 생성 처리에 대한 조건을 설정 한다.

 

  • dwFlagsAndAttributes

- 파일 속성 및 옵션을 설정 한다.

 

  • hTemplateFile

- 읽기 모드를 가진 템플릿 파일의 확장 속성을 설정 한다.

- 일반적으로 사용 하지 않으며 NULL을 설정 한다.

 

Return value : 파일 생성 또는 열기에 성공 시 파일의 핸들을 반환 하고, 실패 시 INVALID_HANDLE_VALUE(-1)을 반환 한다.

 

Header : FileAPI.h(include Windows.h)

 

DLL : Kernel32.dll

 


'Win32 API' 카테고리의 다른 글

WriteFile  (0) 2015.03.11
ReadFile  (0) 2015.03.11
TerminateProcess  (0) 2015.03.05
ExitProcess  (0) 2015.03.05
CreateProcess  (0) 2015.03.04

TerminateProcess

2015. 3. 5. 15:22

지정한 프로세스(프로세스 내 모든 스레드 포함)를 종료 한다.

 

- 그림 출처 : MSDN

 

  • hProcess

- 종료할 프로세스의 핸들을 설정 한다.

- 핸들의 접근 권한은 반드시 PROCESS_TERMINATE를 가져야 한다.

 

 

  • uExitCode

- 프로세스 종료 코드를 설정 한다.

- 통상적으로 정상 종료 인경우 0을 비 정상 종료인 경우 -1을 입력 한다.

 

Return value : 성공 시 TRUE, 실패 시 FALSE를 반환 한다.

   실패에 대한 자세한 정보는 GetLastError 함수를 통해 확인할 수 있다.

 

Header : WinBase.h(include Windows.h)

 

DLL : Kernel32.dll


'Win32 API' 카테고리의 다른 글

WriteFile  (0) 2015.03.11
ReadFile  (0) 2015.03.11
CreateFile  (0) 2015.03.10
ExitProcess  (0) 2015.03.05
CreateProcess  (0) 2015.03.04

ExitProcess

2015. 3. 5. 14:59

함수를 호출한 프로세스(프로세스 내 모든 스레드 포함)를 종료 한다.

 

 

- 그림 출처 : MSDN

 

  • uExitCode

- 프로세스 종료 코드를 설정 한다.

- 통상적으로 정상 종료 인경우 0을 비 정상 종료인 경우 -1을 입력 한다.

 

Return value : 반환 값은 없다.

 

Header : WinBase.h(include Windows.h)

 

DLL : Kernel32.dll

'Win32 API' 카테고리의 다른 글

WriteFile  (0) 2015.03.11
ReadFile  (0) 2015.03.11
CreateFile  (0) 2015.03.10
TerminateProcess  (0) 2015.03.05
CreateProcess  (0) 2015.03.04

CreateProcess

2015. 3. 4. 18:45

새로운 프로세스를 생성 한다.

 

 

- 그림 출처 : MSDN

 

  • lpApplicationName

- 윈도우즈 기반 어플리케이션의 실행 파일 이름 이다.

- 파일 이름의 확장자를 반드시 명시해 주어야 한다.

- 이 파라메터의 값을 NULL로 설정하면 lpCommandLine에서 파일 이름을 설정 한다.

 

  • lpCommandLine

- 실행 시 전달 할 명령 행 인자 이다.

- lpApplicationName이 NULL일 경우 이 파라메터에서 파일 이름 또는 파일 이름과 명령행 인자를 설정할 수 있다.

- 명령행 인자가 없을 경우 NULL을 줄 수 있으나 lpApplicationName과 함께 둘 다 NULL이 될 수는 없다.

- 전달할 값을 상수로 설정할 수 없다, 반드시 배열 변수에 전달할 인자를 입력 후 배열의 시작 주소를 설정 한다.

 

  • lpProcessAttributes

-  프로세스 보안 속성을 설정 한다.

-  일반적으로 사용하지 않으며 NULL을 설정 한다.

 

  • lpThreadAttributes

- 스레드 보안 속성을 지정 한다.

- 일반적으로 사용하지 않으며 NULL을 설정 한다.

 

  • bInheritHandles

- 프로세스 핸들의 상속 여부를 설정 한다.

- TRUE 면 자식 프로세스에게 상속 가능한 핸들을 생성하고, FALSE 면 상속 불가능한 핸들을 생성 한다.

 

  • dwCreationFlags

- 우선 순위 등급 및 프로세스의 생성을 제어하는 플래그 이다.

- Process Creation Flags의 값을 설정 한다.

- 일반적인 프로세스 생성 시 0을 설정 한다.

 

  • lpEnvironment

- 프로세스의 환경 블록을 설정 한다, 이 값이 NULL이면 부모 프로세스의 환경 블록을 사용 한다.

- 일반적으로 NULL값을 설정 한다.

 

  • lpCurrentDirectory

- 프로세스의 현재 디렉토리를 설정 한다, NULL값을 설정 하면 부모 프로세스의 현재 디렉토리가 해당 프로세스의 현재 디렉토리로  설정 된다.

- 일반적으로 NULL값을 설정 한다.

 

  • lpStartupInfo

- 프로세스의 초기화 정보를 설정 한다.

- STARTUPINFO(또는 STARTUPINFOEX) 구조체 변수의 값을 설정 하여 주소를 전달 한다.

 

- 일반적으로 멤버 값들을 설정하지 않으나 구조체의 크기를 설정하는 cb의 값은 반드시 입력이 되어 있어야 한다.

- 설정하지 않은 멤버 들은 0으로 초기화하여 전달 한다. 

 

  • lpProcessInformation

- 프로세스의 생성 후 결과 정보를 받기 위한 파라메터이다.

- PROCESS_INFORMATION 구조체 변수의 주소를 전달 한다.

 

Return value : 성공 시 0이 아닌 값을 반환하고, 실패 시 0을 반환 한다.

   실패에 대한 자세한 정보는 GetLastError 함수를 통해 확인할 수 있다.

 

Header : WinBase.h(include Windows.h)

 

DLL : Kernel32.dll

'Win32 API' 카테고리의 다른 글

WriteFile  (0) 2015.03.11
ReadFile  (0) 2015.03.11
CreateFile  (0) 2015.03.10
TerminateProcess  (0) 2015.03.05
ExitProcess  (0) 2015.03.05

프로그램 개발 시 주로 사용하는 Visual Studio 에서는 프로젝트 속성 메뉴에 '문자 집합' 이란 항목이 있다.

(본 포스트에서는 2010 한글판을 사용 하였습니다.)  

 

 

문자 집합 항목에서 사용할 수 있는 옵션은 크게 세가지 '설정 안함(Not Set)', '멀티바이트 문자 집합 사용(Use Multi-Byte Character Set)', '유니코드 문자 집합 사용(Use Unicode Character Set)'이 있다.

 

 

위의 세가지 옵션의 차이를 설명하기 전 컴퓨터에서는 데이터를 처리하기 위해 2진법을 쓴다. 즉 컴퓨터에서는 숫자를 처리할 수는 있지만 문자는 기본적으로 처리가 불가능 하다. 그래서 문자를 처리하기 위해 문자 집합(Character Set) 이라는 것을 사용한다.

 

대표적으로 대부분의 사람들이 잘 알고 있는 아스키 코드(ASCII Code[각주:1])가 그 예이다. 아스키 코드는 이름 그대로 미국 표준 문자 집합이기 때문에 해당 문자 집합에는 전 세계 언어를 표현하기 위한 약속이 되어 있지 않다. 그리하여 만들어진 문자 집합이 바로 유니코드(UNICODE)이다. 유니코드는 전 세계 모든 문자를 컴퓨터에서 일관되게 표현하고 처리하기 위한 국제 표준 이다.

 

이 두 문자 집합을 비교해 보자면 아스키 코드는 문자 하나를 표현하기 위해 메모리 1byte를 필요로 하고 유니코드는 문자 하나를 표현하기 위해 최소 2byte를 필요로 한다.

 

위와 같은 문자 집합들을 크게 세가지로 분류 하는데 그 세가지는 다음과 같다.

 

SBCS(Single Byte Character Set) : 문자 하나를 표현 하는데 있어 1바이트를 사용하는 방식이다.

MBCS(Multi Byte Character Set) : 문자 하나를 표현 하는데 있어 다양한 바이트 수를 사용하는 방식이다.

WBCS(Wide Byte Character Set) : 문자 하나를 표현 하는데 있어 2바이트를 사용하는 방식이다.

 

SBCS의 대표적인 문자 집합은 아스키코드, WBCS의 대표적인 문자 집합은 유니코드라 할 수 있고

MBCS는 아스키코드와 유니코드를 혼용하여 사용할 수 있는 방식이라 할 수 있겠다.

 

본론으로 돌아가 Visual Studio의 문자 집합 설정 세 가지의 차이점을 확인 해보자면 프로젝트 생성 시 정의되는 기본 매크로의 차이가 있다.(프로젝트 속성 -> C/C++ -> 전처리기 -> 전처리기 정의 -> 편집)

 

 

 

 

 

 

 

 

 

 

위 전처리기 정의의 결과를 보면 '설정 안함'으로 선택 시 프로젝트 기본 매크로 설정에 추가 되는 값은 없으며 '유니코드 문자 집합' 사용 시 '_UNICODE' 와 'UNICODE','멀티바이트 문자 집합' 사용 시 '_MBCS' 값이 추가 됨을 확인할 수 있다.

 

결과적으로 문자 집합에 의한 차이는 전처리 과정에서 매크로 값의 차이로 인하여 헤더에 선택되는 자료형 및 함수가 달라 진다는 점이다.

 

문자 집합 선택에 따른 'tchar.h' 헤더파일의 차이를 확인해 본다.

 

'설정 안함' 선택 시 유니코드 영역의 코드는 주석처리가 됨을 확인할 수 있고

 

 

 SBCS and MBCS 영역과 SBCS 영역은 활성 화 되어 있음을 확인할 수 있고 

 

 

 

마지막으로 MBCS 영역 또한 주석처리 되어 있음을 확인할 수 있다.

 

 

정리 해보자면

 

선택 안함                -> SBCS : 활성화,    SBCS and MBCS : 활성화,    MBCS : 주석처리, UNICODE : 주석처리

유니코드 문자 집합   -> SBCS : 주석처리, SBCS and MBCS : 주석처리, MBCS : 주석처리, UNICODE : 활성화

멀티바이트 문자 집합 ->SBCS : 주석처리, SBCS and MBCS : 활성화,    MBCS : 활성화,    UNICODE : 주석처리

 

위와 같은 상태가 된다.

 

SBCS, MBCS 영역의 코드를 살펴 보면 char 계열의 자료형과 관련 함수가 선택 되고 UNICODE 선택 시에는 wchar_t 계열의 자료형과 관련 함수가 선택됨을 확인할 수 있다.

 

마지막으로 정리 보자면 윈도우즈 프로그래밍 시 ANSI 기반의 함수를 사용한다면 '설정 안함' 또는 '멀티바이트 문자 집합'을 사용하고 UNICODE 기반의 함수를 사용한다면 '유니코드 문자 집합'을 사용하면 되겠다.

 

 

  1. American Standard Code for Information Interchange [본문으로]

+ Recent posts