CFile in Konsolenanwendungen
-
Hallo Leute ich hab ein problem:
ich benötige die Klasse CFile in einer Konsolenanwendung! in der hilfe von mvc++ 6 steht das man afx.h einbinden soll. habe ich gemacht und dann kam ein fehler der war das windows.h 2mal eingebunden war weil ich es ja auch so eingebunden habe. auskommentiert und dann 80 fehler!!
Kann ich die klasse irgendwie so benutzen??
Die Konsolenanwendung bekommt eine Datei zugesendet ach ich poste mal die source
BOOL bRet = TRUE; // return value // used to monitor the progress of a receive operation int dataLength, cbBytesRet, cbLeftToReceive; // pointer to buffer for receiving data // (memory is allocated after obtaining file size) BYTE* recdData = NULL; CFile destFile; CFileException fe; BOOL bFileIsOpen = FALSE; // open/create target file that receives the transferred data if( !( bFileIsOpen = destFile.Open( fName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &fe ) ) ) { //Fehler behandeln! } // get the file's size first cbLeftToReceive = sizeof( dataLength ); do { BYTE* bp = (BYTE*)(&dataLength) + sizeof(dataLength) - cbLeftToReceive; cbBytesRet = sockClient.Receive( bp, cbLeftToReceive ); // test for errors and get out if they occurred if ( cbBytesRet == SOCKET_ERROR || cbBytesRet == 0 ) { //Fehler behandeln } // good data was retrieved, so accumulate // it with already-received data cbLeftToReceive -= cbBytesRet; } while ( cbLeftToReceive > 0 ); dataLength = ntohl( dataLength ); // now get the file in RECV_BUFFER_SIZE chunks at a time recdData = new byte[RECV_BUFFER_SIZE]; cbLeftToReceive = dataLength; do { int iiGet, iiRecd; iiGet = (cbLeftToReceive<RECV_BUFFER_SIZE) ? cbLeftToReceive : RECV_BUFFER_SIZE ; iiRecd = sockClient.Receive( recdData, iiGet ); // test for errors and get out if they occurred if ( iiRecd == SOCKET_ERROR || iiRecd == 0 ) { //Fehler behandeln } // good data was retrieved, so accumulate // it with already-received data destFile.Write( recdData, iiRecd); // Write it cbLeftToReceive -= iiRecd; } while ( cbLeftToReceive > 0 );
kann ich das irgendwie in eine Konsolen anwendung bringen? Kann ich vielleicht nen anderen typ als CFile für den empfang von den dateien benutzen?
hoffe ihr könnt mir helfen
mfg
pelzniggel
-
warum nutzt du nicht normale dateiarbeit ohne mfc (ist sowieso überkandidelt dafür..)
zu finden als c-dateiarbeit:
als c-plusplus dateiarbeit
im faq c++ unter ströme
und sockets allgemein
ps: übrigens geht das mit afx schon.
die windows.h zweimal drin? kommentier sie aus, wenn du sie drin hast, und verschieb mal die reihenfolge der winsock header und des afx.
-
danke! wenn das mit der afx.h geht dann bleib ich lieber dabei!
ich habe jetzt folgende header eingebunden!
#include <afx.h>
#include <wininet.h>
#include <stdio.h>
#include <iostream.h>
weis nur nit in welcher reihenfolge!
auf jeden fall muss ja afx.h vor wininet.h weil in afx.h ja die windows.h ist. weis jemand die richtige reihenfolge??
danke!
mfg
pelzniggel
-
funktioniert doch prima?
#include <afx.h> #include <wininet.h> #include <stdio.h> #include <iostream.h> int main(){ BYTE* recdData = NULL; CFile destFile; CFileException fe; BOOL bFileIsOpen = FALSE; if( !( bFileIsOpen = destFile.Open( "test.txt", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &fe ) ) ) { //Fehler behandeln! } }
vergiss nicht, mfc mitzulinken in den einstellungen, aber ich denke, das hast du.
-
Ja danke!
Ich habs schon gelöst ich hatte vergessen
#include <afxsock.h>
mit einzubindnen
mfg
pelzniggel