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 |