2014-11-16 2 views
-1

WIN32 API를 사용하여 파일을 읽으려고했지만 한 문자를 인쇄하려고하면 완전히 횡설수설합니다. unicode, ansi, utf-8 파일을 변경하려고했지만 문제가 지속됩니다.win32 api 파일 읽기

#include <windows.h> 
#include <iostream> 

using namespace std; 

int main(){ 

TCHAR buff[512]; 
DWORD wr,pos; 
DWORD bytesWritten; 
DWORD len = (DWORD)strlen(buff); 


HANDLE f = CreateFile("test.txt",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); 

if(f==INVALID_HANDLE_VALUE) 
{ 
    cout<"error"; 
} 



ReadFile(f, buff ,len,&wr, NULL); 

cout<<buff[0]; 




CloseHandle(f); 

return 0; 
} 
+0

출력에 무엇이 표시됩니까? 너는 그것을 인쇄 할 수 있니? – ha9u63ar

+0

'ReadFile' 오류 코드를 확인 했습니까? 파일에서 읽을 수 없으므로 실패합니다. – wimh

+0

헤더는 어디에 있습니까? – ha9u63ar

답변

2

쓰기 위해 파일을 열고 읽으려는 것이 주된 문제입니다.

또한 T 재료는 좋지 않지만이 구체적인 예에서는 피해를주지 않을 수도 있습니다.

하지만 그걸 없애고 파일을 열어서 읽으십시오.

간단한 버그 : 버퍼 길이 계산. 임의의 문자열 길이가 있습니다. std::end(buff) - std::begin(buff)으로 버퍼 길이를 얻습니다. 또는 적절한 sizeof 표현입니다.

또한 API 함수를 통해 버퍼로 읽는 것이 0으로 종료되지 않습니다. 보고 된 바이트 수를 읽은 다음이를 사용해야합니다. 예 : std::string을 만듭니다.

0

GENERIC_WRITE 모드를 읽을 수없는 파일을 엽니 다. 읽고 쓰고 싶다면 GENERIC_READ | GENERIC_WRITE으로 변경하십시오. 읽는 경우에만 GENERIC_READ으로 변경하십시오.

또한 strlen(buff)이라는 표현은 버퍼 크기를 제공하지 않습니다.
sizeof(buff)/sizeof(buff[0])으로 변경하십시오.