datei einlesen und ausgeben
-
ich wollte ein extern stehende datei einlesen und sie dann in einer messagebox ausgeben, leider habe ich dabei ein fehler gemacht den ich nicht finden kann:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HANDLE hFile; hFile = CreateFile("Hallo.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "Datei 'Hallo.txt' konnte nicht geöffnet werden!", "Fehler", MB_OK | MB_ICONEXCLAMATION); return 0; } switch(message) { case WM_CREATE: { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); BYTE * pbSpeicher; pbSpeicher = (dwFileSize+1); pbSpeicher[dwFileSize] = 0; DWORD dwFileRead; ReadFile(hFile, pbSpeicher, dwFileSize, &dwFileRead, NULL); MessageBox(NULL, pbSpeicher, "Dateiinhalt", MB_ICONERROR | MB_OK); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }ich hoffe jemand kann mir helfen??!!
-
Du versucht auf pbSpeicher zuzugreifen, ohne Speicher (mittels new[] oder malloc()) zu reservieren.
Des weiteren solltest Du das öffnen der Datei auch in den WM_CREATE-Zweig packen...
-
das malloc ist beim kopieren irgendwie weggekommen, es ist sonst da.
auch wenn ich den von dir genannten teil in die create message kopiere passiert nichts.so dort:
error C2440: '=' : 'void *' kann nicht in 'unsigned char ' konvertiert werden
Konvertierung von 'void' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlungerror C2664: 'MessageBoxA' : Konvertierung des Parameters 2 von 'unsigned char *' in 'const char *' nicht moeglich
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
-
Wo kommt dieser Fehler? Nimm mal statt BYTE einfach CHAR - wenn du eh Text einließt

Bei dem Aufruf von ReadFile muss eben hFile gültig und Speicher reserviert sein.
-
das mit dem char hat was gebracht, jetzt kommt nur noch ein fehler:
error C2440: '=' : 'void *' kann nicht in 'char ' konvertiert werden
Konvertierung von 'void' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlungund das kommt bei:
pbSpeicher = malloc(dwFileSize+1);
-
Auch wenn mich gleich alle prügeln werden:
Tu halt, was Dein Compiler Dir sagt:
pbSpeicher = (char
malloc(dwFileSize+1);
-
oder einfach new und delete[] verwenden

-
HANDLE hFile;
hFile = CreateFile(TEXT("Hallo.txt"), GENERIC_READ | GENERIC_WRITE,Versuche es doch mal so !