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 Typumwandlung

    error 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 Typumwandlung

    und 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 !


Anmelden zum Antworten