kostenloser Webspace werbefrei: lima-city


fread Lese-Fehler

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    sw1tch

    Kostenloser Webspace von sw1tch, auf Homepage erstellen warten

    sw1tch hat kostenlosen Webspace.

    Ich möchte gerne eine binäre Datei einlesen, Source-Code dazu:

    char* KeyFile( HWND hWnd ) {
    	char szFilePath[MAX_PATH];
    	
    	uint64 FileSize;
    	char *szBuffer;
    	
    	FILE *File;
    	
    	OPENFILENAME ofn;
    	
    	ZeroMemory(&ofn, sizeof(OPENFILENAME));
    	ofn.lStructSize = sizeof(OPENFILENAME);
    	ofn.hwndOwner = hWnd;
    	ofn.lpstrFile = szFilePath;
    	ofn.nMaxFile = sizeof(szFilePath);
    	ofn.lpstrFilter = "All\0*.*\0";
    	ofn.nFilterIndex = 1;
    	ofn.lpstrFileTitle = NULL;
    	ofn.nMaxFileTitle = 0;
    	ofn.lpstrInitialDir = NULL;
    	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    
    	if ( GetOpenFileName(&ofn) == TRUE ) {
    		File = fopen( szFilePath , "rb" );
    		if ( File == NULL )
    			return "";
    
    		fseek ( File , 0 , SEEK_END );
    		FileSize = ftell( File );
    		rewind ( File );
    
    		szBuffer = (char*)malloc( sizeof(char)*FileSize );
    		if (szBuffer == NULL)
    			return "";
    
    		if( fread(szBuffer, 1, FileSize, File) != FileSize )
    			return "";
    
    		fclose( File );
    	}
    	return szBuffer;
    }


    Nun funktioniert alles soweit prima, doch leider liest er (scheinbar?) nur die ersten Bytes einer Datei ein.
    Bspw. wird bei einer Portable Executable (.exe) nur das "MZ" des Headers eingelesen.

    Hoffe auf hilfreiche Antworten!
    MfG
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wie verarbeitest du szBuffer später?
    Hast du FileSize mal ausgeben lassen?
    Vermutlich liest er zwar alles in den Puffer, aber eine der folgenden Routinen liest eine binäre Null und terminiert damit den String, der gar keiner ist (weil Puffer)?

  4. Autor dieses Themas

    sw1tch

    Kostenloser Webspace von sw1tch, auf Homepage erstellen warten

    sw1tch hat kostenlosen Webspace.

    Ich konnte dies soweit erstmal lösen...
    Inzwischen bereitet mir die binäre Null allerdings einige Probleme.
    Als Beispiel habe ich ein Char-Array und dieses enthält die Zeichenfolge "\n". Diese wird nun als Steuerzeichen interpretiert.
    Gibt es eine Funktion, die Steuerzeichen automatisch entschärft, also aus dem "\n" ein "\\n" macht?

    MfG

    Beitrag zuletzt geändert: 2.12.2009 18:06:13 von sw1tch
  5. Meine C-Zeit liegt leider lange hinter mir.

    Du kannst mit einer Ersetzen-Funktion (strreplace?)
    alle'\' -Zeichen durch '\\' ersetzen.
  6. Autor dieses Themas

    sw1tch

    Kostenloser Webspace von sw1tch, auf Homepage erstellen warten

    sw1tch hat kostenlosen Webspace.

    Ja, das wäre eine Möglichkeit.

    Ich bin nochmal ordentlich mit dem Debugger durch den Code gestept und nun offenbart sich mir folgendes Problem:

    Ich habe eine Verschlüsselung geschrieben die Zufallswerte zwischen 0 und 255 generiert und diese dann mit jedem einzelnen Zeichen des zu verschlüsselnden Strings XORed (Idee einer OTP-Verschlüsselung).

    Nun kann es durchaus passieren, dass der User beispielsweise 'Z' (Ascii-Wert ist 90) eingibt und die Verschlüsselung dazu als Wert ebenfalls 90 generiert. XORed man nun beide Werte erhält man als binären Wert 0000 0000, also den "Null Character", der einen String terminiert und damit beendet.

    Ich suche nach einer Möglichkeit, diesen Null Character irgendwie zu umgehen oder seiner Funktion zu berauben...
    Es ist leider nicht möglich, dass ich den Character irgendwie ersetzen könnte oder so, da meine Verschlüsselung ja jeden ASCII-Wert generieren könnte...

    MfG
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!