Problem mit ReadFile - Finde den Fehler nicht...



  • Hallo Leute,

    Der folgende Code lässt sich problemlos compilieren und ausführen. Aber ReadFile funktioniert nicht. Ich hab keine Ahnung worans liegen könnte. Ich benutze Dev-C++.

    dat = CreateFile(filename,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    
        SetFilePointer(&dat,0,0,FILE_BEGIN);    // Brauch ich das überhaupt??
    
        if (dat == INVALID_HANDLE_VALUE)
        {
            GetWindowText(prothwnd,prot,1024000);
            sprintf (prot,"%s   -   Datei nicht vorhanden!",prot);
            SetWindowText(prothwnd,prot);
        }
    
        else
        {
            filesize = GetFileSize(dat, NULL);
            infile = new char[filesize+1];
            memset(infile,0,sizeof(infile));
    
            GetWindowText(prothwnd,prot,1024000);
            sprintf (prot,"%s   -   Dateigröße: %ld Bytes",prot,filesize);
            SetWindowText(prothwnd,prot);
    
            if (ReadFile(&dat,&infile,filesize,b_read,NULL) == 0)
                 MessageBox(NULL,"Feehler!!","Hm..",MB_OK);  // Genau diese Fehlermeldung wird immer ausgegeben.
            MessageBox(NULL,infile,"Geht net!",MB_OK);  // Und in infile steht das nichts drinnen.
    
            delete[] infile;
    
            CloseHandle(dat);
        }
    

    Ich hab schon alles Mögliche probiert. Aber nie bekomm ich das was in der Datei steht. Obwohl die Datei "erfolgreich" geöffnet wird... Wisst ihr worans liegt?

    Vielen Dank schon mal im voraus 🙂

    LG,
    Dago



  • Du üebrgibst bei ReadFile die Addresse von dem HANDLE dat. Das ist schonmal falsch, das sollte ReadFile(dat,&infile,filesize,b_read,NULL) sein.



  • struct DateiFeld
     {
     unsigned long ulRetourZahl;      /*Gibt die Anzahl der wirklich geschriebenen oder gelesenen Bytes retour */ 
    
     char cLeseText[1001]; /* speicher für 1000 Bytes ..ich gebe immer eins mehr */
     HANDLE hDatei;
     }DF;
    
    DateiBearbeitenOderNeu(char cPfad[300])  
     {
     SetLastError(0);
     DF.hDatei=CreateFile(cPfad,GENERIC_READ | GENERIC_WRITE,
                          FILE_SHARE_READ | FILE_SHARE_WRITE, 
                          NULL,
                          OPEN_ALWAYS, 
                          FILE_ATTRIBUTE_HIDDEN,  /*muss nicht versteckt sein :clown: */
                          NULL);
    
     return(GetLastError());
     }
    
    DateiLesen()
     {
     ReadFile(DF.hDatei,DF.cLeseText,1000,&DF.ulRetourZahl,NULL); /* Lesen von 1000 Bytes*/
     }
    
    DateiSchliessen() 
     {
     SetLastError(0);
     if(DF.hDatei != INVALID_HANDLE_VALUE) {CloseHandle(DF.hDatei);} /* nur schließen wenns geöffnet ist */
     return(GetLastError());
     }
    

    Beim auslesen gibst natürlich mehrere Möglichkeiten
    Hoffe es hilft wenns prob gibt posten 😉



  • Danke für die schnellen Antworten. Hab das Problem gefunden.

    So funktionierts:

    ReadFile(dat,infile,filesize,&b_read,NULL)
    

    Gruß,
    Dago



  • Sorry, hab jetzt noch n anderes Problem...
    Und zwar, wie kann ich die Datei in einem "BINARY-MODE" öffnen.

    Als Beispiel will ich eine Bild-Datei öffnen und den ganzen Inhalt in eine andere Datei schreiben. (Ist nur ein Beispiel, damit ihr wisst was ich mein, natürlich ist diese Methode zum Kopieren schwachsinnig!)

    Danke nochmal...



  • Wieso sollte das da oben nicht binärmodus sein?



  • Diese Binär/Textdatei Unterscheidung gibt es bei den WinAPI Funktionen nicht. Das ist ne Sache der Standardbibliothek von C und C++.



  • Ok, danke.... lag nicht an ReadFile sondern an strlen...


Anmelden zum Antworten