WriteFile

원형

BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);

MFC 원형

해당하는 함수 없음

인수

▶hFile : 기록하고자 하는 파일의 핸들. 이 파일은 GENERIC_WRITE 액세스 권한으로 열어야 한다.

▶lpBuffer : 출력할 데이터를 가진 버퍼

▶nNumberOfBytesToWrite : 기록할 바이트 수를 지정한다. 파이프로 네트웍 전송을 할 때는 65535바이트까지 기록할 수 있다.

▶lpNumberOfBytesWritten : 실제로 기록한 바이트 수를 리턴받기 위한 출력용 인수. WriteFile은 호출 즉시 이 값을 0으로 만든다. 비동기 입출력을 하지 않을 경우 이 인수는 NULL로 줄 수 없으며 반드시 DWORD형 변수에 대한 포인터를 제공해야 한다.

▶lpOverlapped : 비동기 입출력을 위한 OVERLAPPED 구조체의 포인터. 파일을 FILE_FLAG_OVERLAPPED 플래그로 열었으면 이 구조체를 반드시 제공해야 한다. 비동기 입출력을 사용하지 않을 경우 NULL을 주면 된다.

리턴

성공하면 0이 아닌 값을 리턴하며 실패하면 0을 리턴한다.

설명

파일에 데이터를 기록한다. 주로 동기적인 출력에 사용하지만 OVERLAPPED 구조체를 제공하면 비동기 입출력을 할 수도 있다. 파일 포인터가 가리키고 있는 지점에 데이터를 기록하며 기록을 완료한 후 실제 기록한 바이트수만큼 파일 포인터를 이동시켜 준다. 단, 비동기 입출력 중일 때는 응용 프로그램이 파일 포인터를 직접 이동시켜 주어야 한다.

파일뿐만 아니라 파이프, 소켓, 통신 포트, 콘솔 등의 장치로도 데이터를 출력할 수 있다.

예제 1

다음 예제는 에디트 컨트롤에 입력된 텍스트를 파일로 저장한다.

HWND hEdit;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	HANDLE hFile;
	DWORD dwWritten;
	TCHAR Text[32000];

	switch(iMessage) {
	case WM_CREATE:
		hEdit=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,
			10,10,400,300,hWnd,(HMENU)0,g_hInst,NULL);
		return 0;
	case WM_LBUTTONDOWN:
		hFile=CreateFile("c:\\EditText.txt",GENERIC_WRITE,0,NULL,
			CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
		GetWindowText(hEdit,Text,32000);
		WriteFile(hFile,Text,lstrlen(Text),&dwWritten,NULL);
		CloseHandle(hFile);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

에디트의 텍스트를 Text 버퍼에 구한 후 이 문자열의 길이만큼 hFile로 출력하도록 하였다.

참고함수

CreateFile, ReadFile

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr