1. 파일 공유 예제
- 파일 공유 허용범위를 지정하기 위해선 CreateFile() 사용.
#include <windows.h>#include <tchar.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);HINSTANCE g_hInst;LPWSTR lpszClass=L"ApiBase";int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow){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" 이제 꿈나라로 떠납니다ㅎㅎ";DWORD dwRead;TCHAR strRead[MAX_PATH]; // 읽어들인 문자열을 저장할 버퍼.switch(iMessage){case WM_LBUTTONDOWN: // 마우스 왼쪽 클릭 시hFile=CreateFile(L"FileInOutExx.txt",GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,0,NULL);// 파일을 생성한다. 그 파일은 디버깅파일이 있는 디렉토리의 만들어지며, 이름은 FileInputExx.txt이다. 이것은 쓰기만 가능하며, 공유는 안 된다.// 또한 상속은 하지 않으며, 파일이 없다면 만들어서 기록하며 있다면 내용을 덮어씌운다.memcpy(strWrite, &wd,2);// 유니코드 인식을 위하여 strWrite에 있는 2byte를 &wd(0xFEFF)에 저장.WriteFile(hFile, strWrite, (wcslen(strWrite)+1)*sizeof(TCHAR), &dwWritten, NULL);// 파일의 핸들값을 가지고오며, 두번째에는 입력할 문자열, 그 다음은 입력할 문자열의 크기, 실제로 쓰여진 바이트 수를 리턴하는 DWORD 변수의 포인터,// 마지막은 비동기식 입출력이므로 NULL을 입력.//CloseHandle(hFile); // 파일 사용이 끝나면, 사용된 핸들을 종료시키기.return 0;case WM_RBUTTONDOWN: // 마우스 오른쪽 클릭 시hdc=GetDC(hWnd);hFile=CreateFile(L"FileInOutExx.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);// FileInOutExx.txt라는 파일을 읽기모드로 생성하겠다는 의미. 또한, 세 번째 인수가 0이므로 파일은 공유하지 않으며, 이미 생성된 파일을 읽어오는 것이기 때문에 OPEN_EXISTING를 씀.ReadFile(hFile,strRead,wcslen(strRead),&dwRead,NULL);// 읽어올 파일의 핸들을 의미하며, 읽어온 데이터를 strRead 버퍼에 저장하고, 쓰려는 바이트 수 , 실제로 입력한 바이트 수 반환, 비동기식 입력 사용 x 하겠다는 의미.TextOut(hdc,100,100,strRead,wcslen(strRead));//CloseHandle(hFile); // 사용한 핸들 닫아주기.ReleaseDC(hWnd,hdc);return 0;case WM_DESTROY:if(hFile)CloseHandle(hFile);PostQuitMessage(0);return 0;}return(DefWindowProc(hWnd,iMessage, wParam, lParam));}// 빨간색 글씨를0 -> FILE_SHARE_READ로 변경하면 파일공유 가능
// 변경 전
// 변경 후
'WIN32 API' 카테고리의 다른 글
WIN32 API- 파일 및 디렉토리 관리 (0) | 2018.12.11 |
---|---|
WIN32 API- 파일의 입출력 예제2 (0) | 2018.12.08 |
WIN32 API- 파일의 입출력 예제1 (0) | 2018.12.07 |
WIN32 API- 파일의 입출력(ReadFile)/(WriteFile) (0) | 2018.12.06 |
WIN32 API- 파일의 입출력(CreateFile) (0) | 2018.12.06 |