2015-11-07 87 views
-1
文件

我正在學習如何在WINAPI 使用而我想從我的電腦 但由於某種原因,這是行不通的讀取文件...如何讀取使用的ReadFile上WINAPI

HANDLE hFile; 
//PVOID First_Bytes[2048]; 
char First_Bytes[2048]; 
DWORD dbr = 0; 
hFile = CreateFile(L"d:\\My-File",GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL); 
if (hFile == INVALID_HANDLE_VALUE) { 
    printf("Error %x", GetLastError()); 
    return 1; 
} 
if (ReadFile(hFile, &First_Bytes, 512, &dbr, NULL) == 0) { 
    printf("ReadFile error: %x", GetLastError()); 
    return 1; 
} 
printf("%s", First_Bytes); 
CloseHandle(hFile); 

控制檯不打印任何東西。

我在做什麼錯?

  • 我編輯了代碼並添加了錯誤檢查。 但仍然領事不打印任何東西
+0

取出'FILE_FLAG_OVERLAPPED',並做一些錯誤檢查。 –

+0

你的緩衝區是一個2048個指針的數組。你不是那個意思。你想'char buffer [2048]',你必須null結束。你也必須檢查錯誤。 –

+0

我編輯了從頭開始的代碼,但我可能錯過了一些東西(雖然不打印任何錯誤,沒有打印) – 0xPwn

回答

1

合乎邏輯的結論是,您的文件中的第一個字節是零。您將緩衝區視爲以空字符結尾的字符串,因此不會打印任何內容。

請注意,不能保證您的緩衝區空終止,因此您可能有未定義的行爲。

+0

這是文件的開始:「00 00 00 1C 66 74 79 70 69 73 6F 6D 00 00 00 01 69 73 6F 6D 61 76 63 31 69 73 6F 36 00 0B C1 A7 6D 6F 6F 76 00 00 00 6C 6D 76 68 64「,根據你所說的因爲那3個第一個字節是0,那麼程序將它們當作EOF?我該如何解決這個問題? PRINTF始終與零作爲字符串的結尾相關。 – 0xPwn

+0

該文件不是文本文件。它是什麼? –

+0

這有什麼關係什麼類型的文件? 它不只是應該打開它並閱讀它? (十六進制值) – 0xPwn