1. 파일 생성 및 쓰기 예제 



#include <windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); // 윈도우 메시지를 처리하는 WndProc()함수
HINSTANCE g_hInst;
LPWSTR lpszClass=L"ApiBase";
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow) // 윈도우 자체를 생성하는 WinMain()함수
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static HANDLE hFile; // 핸들파일을 만들어줌.
DWORD dwWritten;
WORD wd=0xFEFF;
TCHAR strWrite[]=L" 문자열을 파일에 씁니다.";
switch(iMessage)
{
case WM_LBUTTONDOWN:
hFile=CreateFile(L"FileInOutExx.txt",GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,0,NULL);
// 파일을 생성한다. 그 파일은 디버깅파일이 있는 디렉토리의 만들어지며, 이름은 FileInputExx.txt이다. 이것은 쓰기만 가능하며, 공유는 안 된다.
// 또한 상속은 하지 않으며, 파일이 없다면 만들어서 기록하며 있다면 내용을 덮어씌운다.
memcpy(strWrite, &wd,2); // 유니코드 인식을 위해 작성할 문자배열의 2byte를 0xFFEF에 넣는다.
WriteFile(hFile, strWrite, (wcslen(strWrite)+1)*sizeof(TCHAR), &dwWritten, NULL);
// 데이터를 읽어와서 쓴다. hFile은 CreateFile() 함수로부터 생성한 파일 핸들 값이 들어가게 되며, 두번째에는 입력할 문자열,
// 세번째에는 입력할 문자열의 크기, 그 다음은 실제로 쓰여진 바이트 수를 리턴하기 위해 DWORD 변수의 포인터가 들어가며, 마지막엔 비동기식 입출력을 NULL로 한 것이다.
CloseHandle(hFile); // 파일 사용이 끝나면 파일 닫기
return 0;
}
return(DefWindowProc(hWnd,iMessage, wParam, lParam));
}





















// 디버깅 후, FileInOutEx.exe 실행 -> 마우스 왼쪽 클릭 


// 그러면 FileInOutExx.txt가 생성된다. 

또한, 그것을 열어보면 아까 코드에 있던 strWrite[]의 내용이 적혀있는 것을 볼 수 있다. 




* memcpy() 함수 

// memory copy라는 의미로, 메모리의 내용을 바이트단위로 다른 곳에 복사해주는 함수. 


- 함수 원형 

memcpy(목적지포인터, 원본포인터, 크기);

void *memcpy(void*_Dst, void const*_Src, size_t_Size);


ex) memcpy(strWrite, &wd, 2);

// 문자열 변수인 strWrite의 처음 2byte를 &wd(0xFEFF)에 입력시키기. 

왜?? 유니코드로 제대로 인식하기 위해.  




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

WIN32 API- 파일 공유  (0) 2018.12.11
WIN32 API- 파일의 입출력 예제2  (0) 2018.12.08
WIN32 API- 파일의 입출력(ReadFile)/(WriteFile)  (0) 2018.12.06
WIN32 API- 파일의 입출력(CreateFile)  (0) 2018.12.06
WIN32 Programming  (0) 2018.12.06

+ Recent posts