[Datei] fopen ()
-
Hi
Ich habe in meiner WinSock-Klasse versucht, Dateien zu versenden. Hier mal die beiden Funktionen:
SENDENint WAXSOCKET::SendData (SOCKET sSocket, const char FAR * tyData, int iBytesToSend = 0, int iSendMode = SEND_DATA) { FILE *pFile; DWORD dwData; unsigned int iData; if (iBytesToSend == 0) iBytesToSend = 500; if (iSendMode == SEND_FILE) { pFile = fopen (tyData, "rb"); if (pFile != 0) { fclose (pFile); OutputDebugString ("(ERROR) WAXSOCKET::RecvData () -> fopen () fehlgeschlagen!\n"); return WSERROR_FILE; } fseek (pFile, 0, SEEK_END); iData = ftell (pFile); fseek (pFile, 0, SEEK_SET); wsh.iFileSize = iData; lstrcpy (wsh.lpFile, ::FormatFileString ((char*) tyData)); wsh.iSendMode = SEND_FILE; wsh.iBlockSize = SEND_BLOCKSIZE; } lWaxBytes = send (sSocket, TYPE_STRUCT (wsh), sizeof (WAXSEND_HEADER), 0); if (lWaxBytes == SOCKET_ERROR) { OutputDebugString ("(ERROR) WAXSOCKET::SendData () -> send () fehlgeschlagen!\n"); return WSERROR_SEND; } if (iSendMode == SEND_FILE) { char file[4096]; while (iData >= 4096) { fread (file, 4096, 1, pFile); send (sSocket, file, 4096, 0); iData -= 4096; } if (iData != 0) { fread (file, iData, 0, pFile); send (sSocket, file, iData, 0); } fclose (pFile); return 0; } lWaxBytes = send (sSocket, tyData, iBytesToSend, 0); if (lWaxBytes == SOCKET_ERROR) { OutputDebugString ("(ERROR) WAXSOCKET::SendData () -> send () fehlgeschlagen!\n"); return WSERROR_SEND; } return lWaxBytes; }EMPFANGEN
int WAXSOCKET::RecvData (SOCKET sSocket, char FAR * tyData, int iBytesToRecv = 0) { FILE *pFile; DWORD dwData; unsigned int iData; if (iBytesToRecv == 0) iBytesToRecv = 500; recv (sSocket, TYPE_STRUCT (wsh), sizeof (WAXSEND_HEADER), 0); if (wsh.iSendMode == SEND_FILE) { char buffer[MAX_PATH]; wsprintf (buffer, "%s%s", lpWaxSaveFolder, wsh.lpFile); pFile = fopen (buffer, "wb"); if (pFile != 0) { fclose (pFile); OutputDebugString ("(ERROR) WAXSOCKET::RecvData () -> fopen () fehlgeschlagen!\n"); return WSERROR_FILE; } iData = wsh.iFileSize; char file[4096]; while(iData > 0) { dwData = recv (sSocket, file, 4096, 0); fwrite (file, dwData, 1, pFile); iData -= dwData; } fclose (pFile); return 0; } lWaxBytes = recv (sSocket, tyData, iBytesToRecv, 0); if (lWaxBytes == 0) { DetachSocket (sSocket); return WSERROR_SOCKETCLOSED; } else if (lWaxBytes == SOCKET_ERROR) { return WSERROR_RECIEVE; } return lWaxBytes; }Also ich weiß nicht, wo fopen () ein Problem hat, jedenfalls immer wenn ich eine Datei senden möchte, sagt er mir Datei nicht gefunden. So sieht zum Beispiel eine Pfadangabe aus:
K:\\WinSock\\test.exeDIV Ominion
EDIT: Die cpp-Tags funzen nicht
-
#include <stdio.h> void main() { printf("CPP-Tags funzen...\n"); }
-
Bei rec, verwendest Du "wsprintf" und "fopen"... da passt was nicht...
Kommen da nicht diverse Compiler-Warnungen???
-
nein, es wird alles ohne warnung oder error compiliert. Aber er hat ja das Problem schon bei Send...
Mfg Ominion
PS: naja, vorhin haben die tags nicht gefunzt...
EDIT: mit den Tags: das lag daran, dass ich einen Teil fett gemacht habe, da streikt er...
-
Vielelicht solltest Du Deine Abfrage rummdrehen?
if (pFile != 0)=>
if (pFile == 0)und dann in dem Block das "fclose" rausmachen...
-
Hmm, na wehe das ist es^^
Mfg Ominion
EDIT: bringt nichts...
-
Na, dann wirst Du ums debuggen nicht drum rum kommen

-
na klasse...dann mus ich denn rotz erstmal wieder ins VS packen...
-
Maybe ein \r\n?
-
??? habe ich was verpasst?
Mfg Ominion
EDIT: @....: was soll das nüten bzw wo hin damit?