Datei auslesen und in ein char * packen



  • moin

    ich hab ein problem...
    und zwar möchte ich gern eine datei öffnen und auslesen und das gelesene eins zu eins in einen char * packen ...

    öffen tu ich sie wie folgt:

    if(f.Open(file_name,CFile::modeRead | CFile::typeBinary)) {
    }
    

    nur wie kann ich nun diese datei auslesen und in einen char* packen ?
    ahja und als 2. möchte ich diesen char * dann später in einer anderen datei wieder abspeichern ...

    mfg LT




  • Mod

    @theta: Das liest die Datei aber nur in Blöcken.

    @LordTerra:
    - Ermittel mit CFile::GetStatus die Größe der Datei.
    - Lege mit new einen entsprechenden char Array an
    - Lieas mit CFile::Read die ganze Datei ein.



  • CFile f;
    			if(f.Open(m_aktivConfig,CFile::modeRead | CFile::typeBinary)) {
    				int flen=f.GetLength();
    				long int datgr; 
    
    				CFileStatus pStat;
    				CFile::GetStatus(&f, pStat);
    				datgr = pStat.m_size;
    			}
    

    ^^ das funktioniert so aber irgendwie nicht ...

    ich bekomm vom complier immer fehlermeldung:
    error C2665: 'GetStatus' : Durch keine der 2 Ueberladungen kann Parameter 1 vom Typ 'class CFile *' konvertiert werden



  • Wahrscheinlich eher so:

    f.GetStatus(pStat);
    


  • öffen und senden (SendBlock ist ne funktion die über nen socket den char* verschickt):

    CFile f;
    			if(f.Open(m_aktivConfig,CFile::modeRead | CFile::typeBinary)) {
    				long int datgr; 
    				CFileStatus pStat;
    				f.GetStatus(pStat);
    				datgr = pStat.m_size;
    				char *buf2;
    				buf2 = (char *)calloc(datgr, sizeof(char));
    				f.Read(buf2, datgr);
    
    				ret=SendBlock(soc,buf2,strlen(buf2));
    			}
    

    ueber den recv wird das gesendete von einem anderen programm emfangen
    und soll dann wieder in eine datei geschrieben werden ...

    char *recvbuffer;
    							recvbuffer = (char *)calloc(len, sizeof(char));
    							rc=recv(s,recvbuffer,len,0);
    							if(rc==SOCKET_ERROR) {
    								CString str;
    								str.Format("%d",WSAGetLastError());
    								AfxMessageBox("Fehler: recvfrom, fehler code: "+str);
    							} else {
    								CFile f;
    								char* pFileName=name.GetBuffer(name.GetLength()); 
    								CFileException e;
    								if(f.Open(pFileName,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)) {
    									f.Write(recvbuffer, len);
    								}
    								name.ReleaseBuffer();
    							}
    

    problem: in der erstellten datei steht nur null drin ... eof und stx steht schon drin aber der rest halt net ...

    was mach ich falsch ?

    mfg LT



  • ok fehler gefunden ...
    strlen(buf2) war schuld ...


  • Mod

    BTW: Es gibt auch noch CFile::GetLength. Habe ich nicht dran gedacht. Das macht das natürlich noch einfacher...


Anmelden zum Antworten