warum geht diese fopen function nicht?



  • Mit der Funktion

    DWORD GetFileSize(
    
        HANDLE hFile,	// handle of file to get size of
        LPDWORD lpFileSizeHigh 	// address of high-order word for file size
       );
    

    die Dateigröße auslesen und den Buffer danch mit der ausgelesenen Anzahl Bytes erstellen.

    Mfg.



  • --------------------Konfiguration: test - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    D:\Programme\C++ files\MSDev98\MyProjects\test\main.cpp(90) : error C2057: Konstanter Ausdruck erwartet
    [...]
    test.exe - 4 Fehler, 1 Warnung(en)

    der wert muss doch konstant sein?!



  • Einen Pointer kann man nciht in einen nciht-Pointer konvertieren. Aber man kann den Pointer so bahandeln als wäre er keiner indem man ihn dereferenziert.

    Der Dereferenzierungsoperator ist dieses "*", das du zu hassen scheinst 😉
    Also sagen wir mal...

    int* pInt = 0; //Pointer wird erstellt
    int a = 5; //Integer variable wird erstellt
    
    pInt = &a; //dem Pointer wird die adresse von a übergeben.
    int b = *pInt;  //dem integer b wird der Wert übergeben, auf den der Pointer zeigt, d.h. den er referenziert(repräsentiert).
    //mit dem dereferenzierungsoperator vor dem Pointernamen kann man direkt auf den Wert zugreifen auf den er zeigt.
    
    if(b==a)
       Beep(222,2222); //Hier sollte es Beeeeepen....
    

    Mfg.



  • An die anderen:

    Denkt nciht der Tolga schreibt Mist! (hehe..)
    Er hat seine Farge geändert:

    Zuletzt bearbeitet von pixartist am 19:47:17 20.06.2004, insgesamt 1-mal bearbeitet



  • danach hab ich granicht gefragt 😃 😉 😮



  • @Pixarzist:
    Nie wieder versuch ich dir zu helfen. Um zu lernen wie man Pointer dereferenziert (hoffe inzwischen sagt dir das Wort was) solltest du dir
    'C++ für Dummies' aus der Stadtbib. leihen und lesen.. da wird das so erklärt das du es verstehn könntest.



  • och ... jetzt sei doch nicht beleidigt 🙂 das war doch nicht ernst gemeint, und ich finds nett wie du und andere einem hier helfen 🕶

    edit: btw. die smileys symbolisieren ironie 💡



  • ftell() liefert dir nur die aktuelle Position des Dateizeigers zurück!
    Nach dem Öffnen einer Datei ist der Zeiger normalerweise am Anfang und ftell() liefert 0.
    Du solltest vorher mit fseek() den Dateizeiger auf das Ende setzen, dann ftell() aufrufen und dann wieder mit fseek() an den Anfang setzen!

    Oder du benutzt die WinAPI-Datei-Funktionen:
    CreateFile() zum Datei öffnen
    GetFileSize() zum Dateigröße holen
    ReadFile() um was aus der Datei zu lesen
    CloseHandle() um die Datei wieder zu schließen...



  • ... und dann musst du eben new verwenden, um den Speicher zu reservieren 🙂



  • char *LoadFileToObj(char* file, HWND wind)
    {
    	FILE *topen;
    		if((topen = fopen(file, "rb")) != NULL)
    		{
    			int fileSize;
    			fseek(topen, 0, SEEK_END);
                fileSize = ftell(topen);
    			if(fileSize!=0) {
    				char *buffer;
    				buffer = new char[fileSize-4];
    				fseek(topen, 0, SEEK_SET);
    				fread(buffer, 1, fileSize, topen);
    				MessageBox(wind, buffer, "buffer", 0);
    				fclose(topen);
    				return buffer;
    			}
    		}
    
    	return "error - could not read file!";
    }
    

    so klappts! die -4 hab ich durch ausprobieren, kann sie mir aber nicht erklähren!



  • seltsam! Was kommt denn, wenn du -4 nicht mit angibst?



  • allokier mal ein zeichen mehr und setzte das letzte dann auf 0 damit du nen nullterminierten string hast



  • wenn ich die -4 weglasse hab ich 4 y's mit ´drüber hinten am string





  • ZeroMemory(buffer, fileSize); oder was? dann löscht er ja alles raus oO wie krieg ich denn dieses scheiss anhängsel da weg?



  • Das musst du natürlich vor dem Auslesen machen - direkt nachdem du dir den Speicher reserviert hast 😉



  • ups ja klar 😃 *paddel*


Anmelden zum Antworten