2012-07-03 6 views
0

다음과 같이 코드 조각을 사용하여 텍스트 파일의 내용을 가져옵니다. 그러나 끝에 buff 버퍼는 한 곳에서만 숫자 8을 가지며 그 밖의 것은 없습니다. 열리는 파일에는 "Project"라는 단어 만 있습니다. 콘텐츠 또는 내가받는 결과를 어떻게 처리 할 수 ​​있습니까? 다음 코드의 무엇이 잘못 되었습니까?Windows API를 사용하여 txt 파일의 내용 처리

 TCHAR buff[20]; 
     DWORD dwNumRead; 
     CString finalPath = path + L"\\" + fileName.c_str(); 
     HANDLE hfile=CreateFile(finalPath ,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 

     if(ReadFile(hfile,buff,20,&dwNumRead,NULL)) 
     { 
      CString temp; 
      temp.Format(L"%s",&buff[0]); 
      ATLTRACE(L"Success %s", temp); 
     } 
     CloseHandle(hfile); 
+0

유니 코드 또는 멀티 바이트 문자 집합으로 컴파일 하시겠습니까? 'L "% s"'으로 멀티 바이트와 포맷을 컴파일하는 경우, 첫 번째 문자는 멀티 바이트 문자로 terminating-null처럼 취급 될 후행 '0'을 가질 것입니다. – JoeFish

답변

2

% s 매크로가있는 와이드 문자로 구성된 MFC CString을 인쇄하려고하면 문제가 발생합니다. 넓은 문자를 인쇄하려면 % S 매크로가 필요합니다.

이 작동 :

char buff[20] = ""; 
    DWORD dwNumRead; 
    CString finalPath = path + L"\\" + fileName.c_str();; 
    HANDLE hfile=CreateFile(finalPath ,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 

    if(ReadFile(hfile,buff,20,&dwNumRead,NULL)) 
    { 
     CString temp = buff; 
     ATLTRACE("Success %S", temp); 
    } 
    CloseHandle(hfile); 

그렇지 않으면, 다음과 같은 별도의 C++ 인증 된 정의와 유니 코드에서 프로그램을 컴파일합니다. 유니 코드, _UNICODE

+0

좋아, 잘 작동 해. 문제는 첫 번째 줄에 있습니다. 즉, TCHAR []이 작동하지 않습니다. 일반적으로이 방법이 좋습니다. – arjacsoh

+1

TCHAR도 작동합니다. UNICODE 매크로로 프로그램을 컴파일해야합니다. – PermanentGuest