G
Entweder du nimmst die full-C++ lösung von TextAusDateiAuslesProfi (konstruktivster beitrag als "nicht-member", heftig) un baust den crc dazu oder, wenns ähnlich bleiben soll, nimmst du den code, der anhängt.
OT:
Ist soooo krass, wie wenig problemorientiert hier teils geantwortet wird.
Hauptsache, alle Fehler vom Thread-Starters finden.
Naja, egal, da dies jetzt schon gemacht wurde, hier nur noch bisel code (untested,
lies die comments, da stehn noch paar anregunden un korrekturen von deinem code)
HANDLE hFile = CreateFile(szFilename, FILE_GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) // reicht
{
dwErrorCode = GetLastError();
}
else
{
DWORD dwFileSize = GetFileSize(hFile, NULL); // besser GetFileSizeEx()
// Für die folgende Zeilen siehe GetFileSize() doku
DWORD dwLastError = GetLastError();
if ((dwFileSize == INVALID_FILE_SIZE) && (dwLastError != NO_ERROR))
{
dwErrorCode = dwLastError;
}
else
{
// Hier auf jeden fall noch checken, ob das file frößer als erwartet is. zb:
// if (dwFileSize < MAXIMUM_FILE_SIZE)
DWORD dwSetFilePointerRet = SetFilePointer(hFile, 10, NULL, FILE_BEGIN); // statt magic-value 10 besser konstante nehmen.
// Für die folgende Zeilen siehe SetFilePointer() doku
dwLastError = GetLastError();
if ((dwSetFilePointerRet == INVALID_SET_FILE_POINTER) && (dwLastError != NO_ERROR))
{
dwErrorCode = dwLastError;
}
else
{
BYTE *buffer = (BYTE *)malloc(dwFileSize);
DWORD dwBytesRead = 0;
BOOL bSuccess = ReadFile(hFile, buffer, dwFileSize, &dwBytesRead, NULL); // entweder &buffer[0] oder buffer, aber nicht &buffer
if ((bSuccess == FALSE) || (dwFileSize != dwBytesRead))
{
dwErrorCode = GetLastError();
}
else
{
dwCrc32 = CalculateBufferCRC(buffer, dwBytesRead);
// your part: CRC checking, bla
//.....
//....
}
free(buffer);
}
}
}