Wenn ich versuche, Dateien mit ReadFile()
Windows-API ‚exe‘ zu öffnen, es ist nur die zwei ersten Zeichen der Datei zurück wie: MZ
Read ‚Binary‘ Dateien mit Readfile WinAPI
Hier ist mein Code:
#define BUFFERSIZE 5000
VOID CALLBACK FileIOCompletionRoutine(
__in DWORD dwErrorCode,
__in DWORD dwNumberOfBytesTransfered,
__in LPOVERLAPPED lpOverlapped
);
VOID CALLBACK FileIOCompletionRoutine(
__in DWORD dwErrorCode,
__in DWORD dwNumberOfBytesTransfered,
__in LPOVERLAPPED lpOverlapped)
{
_tprintf(TEXT("Error code:\t%x\n"), dwErrorCode);
_tprintf(TEXT("Number of bytes:\t%x\n"), dwNumberOfBytesTransfered);
g_BytesTransferred = dwNumberOfBytesTransfered;
}
HANDLE hFile;
DWORD dwBytesRead = 0;
char ReadBuffer[BUFFERSIZE] = { 0 };
OVERLAPPED ol = { 0 };
hFile = CreateFile(fullFilePath.c_str(), // file to open
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // normal file
NULL); // no attr. template
ReadFileEx(hFile, ReadBuffer, BUFFERSIZE - 1, &ol, FileIOCompletionRoutine);
Wenn ich drucke ReadBuffer
Es ist nur MZ
(exe-Datei).
aber unter Verwendung von:
std::ifstream file(argv[1], std::ios::in | std::ios::binary);
Es ist perfekt. Wie kann ich Binärdateien mit ReadFile lesen?
Wie drucken Sie 'ReadBuffer'? Als eine NUL-terminierte Saite vermute ich. Was natürlich nicht ist. –
@IgorTandetnik Ich lege den Wert von 'ReadBuffer' auf String und drucke String mit' std :: cout' –
Präzise. Sie drucken es als wären es Textdaten, aber es sind Binärdaten. Wahrscheinlich hat es direkt nach "MZ" ein Nullbyte, und der Druckvorgang stoppt dort. –