[Datei] fopen ()



  • Hi
    Ich habe in meiner WinSock-Klasse versucht, Dateien zu versenden. Hier mal die beiden Funktionen:
    SENDEN

    int 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.exe
    

    DIV 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?


Anmelden zum Antworten