2014-11-16 42 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函數讀入緩衝區不會使其終止零。您需要保留報告的字節數,並以某種方式使用。例如。創建一個std::string

0

GENERIC_WRITE模式打開文件,但無法讀取它。如果您想讀寫,請將其更改爲GENERIC_READ | GENERIC_WRITE。如果您只想閱讀,請更改爲GENERIC_READ

此外,表達式strlen(buff)不會給你緩衝區的大小。更改爲
sizeof(buff)/sizeof(buff[0])