반응형
WriteFile
윈도우 API WriteFile
BOOL WriteFile( // 반환값 : 성공이면 TRUE
HANDLE hFile, // 파일 핸들
LPCVOID lpBuffer, // 기록할 데이터가 저장된 버퍼
DWORD nNumberOfBytesToWrite, // 기록할 최대 바이트수
LPDWORD lpNumberOfBytesWritten, // 실제로 기록한 바이트 수를 받을 변수의 주소
LPOVERLAPPED lpOverlapped // OVERLAPPED 구조체 주소
);
WriteFile은 윈도우 환경에서 파일에 출력할때 사용된다.
실험
WriteFile을 사용하던 중 신기한 경우를 찾아내어서 작성해본다. 파일의 인코딩이 변경된다?? 라는 것에 대한 의문점이다.
▲ 인코딩
파일 인코딩 보는 방법은 메모장에서 [다른이름으로 저장] 탭을 눌러보면 확인 가능하다.
OS : Window10
Tool : Visual Studio 2008
개발환경 : 유니코드
# case 1
TCHAR *pszPath = _T(".\\Test_length.txt");
HANDLE h = CreateFile(pszPath, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if( h != INVALID_HANDLE_VALUE)
{
DWORD dwLen = 0;
TCHAR *pszStr =_T("HELLO WORLD FUCK MAN!!!");
WriteFile(h, pszStr, sizeof(wchar_t)*_tcslen(pszStr), &dwLen, 0);
CloseHandle(h);
}
- 파일 인코딩 : 텍스트파일 ANSI 일때 -> 텍스트파일 UNICODE로 변경
- 문자 모두 출력
- 문자열의 크기 : 23 이지만 유니코드일때는 46
# case 2
TCHAR *pszPath = _T(".\\Test_length.txt");
HANDLE h = CreateFile(pszPath, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if( h != INVALID_HANDLE_VALUE)
{
DWORD dwLen = 0;
TCHAR *pszStr =_T("HELLO WORLD FUCK MAN!!!");
WriteFile(h, pszStr, _tcslen(pszStr), &dwLen, 0);
//WriteFile(h, pszStr, sizeof(char)*_tcslen(pszStr), &dwLen, 0); //같은의미
CloseHandle(h);
}
- 파일 인코딩 : 텍스트파일 ANSI 일때 -> 텍스트파일 ANSI 유지
- 문자열 ANSI유형으로 작성됨..
- 문자열의 크기 : 23
알게된것
1. WriteFile을 사용할때, 세번째 인자의 값은 szieof로 타입을 명시해야한다.
2. 세번째 인자의 값이 무엇인지에 따라서 출력되는 결과물의 인코딩 타입이 결정된다.
3. 그래서 어디에서 적용할 것인가..???
- 텍스트 파일을 읽고 쓸때 컴파일러의 환경과 사용자의 환경이 다를때 적용해볼수 있다.
반응형
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
[MFC]CreateFont (0) | 2018.08.31 |
---|---|
[MFC]트레이아이콘(Tray)과 풍선(Balloon) 알림 사용 (2) | 2018.08.12 |
궁금점, 파일을 읽을때 NULL 문자를 읽을까? (0) | 2018.05.31 |
[MFC] WM_MOUSEHOVER, WM_MOUSELEAVE 메시지 이용방법 (0) | 2018.05.07 |
[MFC]MFC 버튼을 이용한 프로젝트 #1 버튼 추가 + 사이즈조절 (2) | 2018.05.07 |
댓글