Transfer Status ...



  • Hallo,
    ich hab jetzt zwei Anwendungen soweit sich gegenseitig Dateien über ein Netzwerk zu schicken.
    Jetzt würde ich aber gerne noch den Status während der Übermittlung abfragen, hat jemand eine Idee ?

    Thx



  • welchen Status?
    Wieviel von der Datei schon gesendet wurde oder was meinst du?🙄



  • Ja, genau sowas meine ich.
    So wie das halt überall ist...



  • Hol doch einfach vor dem Transfer die Größe der Datei und vergleiche es mit der Größe der empfangenen Daten! Dann kannst du dir den Prozentsatz ja leicht selbst ausrechnen!



  • Gute Idee !
    Dann müsste ich noch einen Timer einbauen...
    Weißt du denn den 'Befehl' zum auslesen der Dateigröße ? (musst jetzt nicht nachgucken)

    Thx



  • CFile::GetLength()



  • Ok, Thx a lot.
    Ich probiers morgen mal aus ....
    Jetzt lern ich erst mal Franz.. *kotz*



  • Ich hab jetzt folgendes beim entgegennehmen der Datei ...

    if(m_bReceive == FALSE) //m_dataLength wurde noch nicht empfangen
        {
    
           m_sFile.Receive(&m_dataLength, 4); 
           m_received=0;                     
    
           m_bReceive = TRUE;
           byte *m_data = new byte[m_dataLength];
        }
    
        int iLen;
        iLen=m_sFile.Receive(m_data+m_received, m_dataLength-m_received);
    
        if(iLen>0)
        {
            m_received = m_received + iLen;
        }
        int iState = m_received/m_dataLength*100*; // Hier ist das Problem !
        m_pState.SetPos(iState);
    
        //Dateiende erreicht?
        if(m_received==m_dataLength)
        {
          CFile destFile(m_strDatei, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
    
          destFile.Write(m_data, m_dataLength); // Write it
          destFile.Close();
          delete m_data;
          m_sFile.Close();
          GetDlgItem(IDC_BCLOSE)->EnableWindow(TRUE);
          GetDlgItem(IDC_BCANCEL)->EnableWindow(FALSE);
          //Statusmeldung
          m_strStatus= "Transfer beendet.";
          UpdateData(FALSE);
        }
    

    Frage: Warum bekomme ich da so gr0ße Zahlen raus ?
    Und wie bekomm ich da % raus ?

    Thx



  • Dreisatz 🙂

    m_received*100/m_dataLength

    PS: Das **byte *** in der if-Abfrage bei m_data muss da raus. Du definierst hier eine neue lokale Variable, sprichst aber weiter unten die Membervariable Deiner Klasse an.



  • Das byte* is da schon längst raus ...
    Wollte es nur nicht nochmal neu schreiben ... 🙂

    Ich finde es aber trotzdem seltsam das m_received*100/m_dataLength != m_received/m_dataLength*100 ...

    Naja jetzt funzt es jedenfalls ...
    Nochmals danke!



  • Hmmmm,
    wie ginge das ganze jetzt auf der Server Seite ?

    m_sFile.Accept(m_sFileAccept); 
    
        CFile myFile;
        myFile.Open(m_strDatei, CFile::modeRead | CFile::typeBinary); 
    
        // Länge senden
        int myFileLength = myFile.GetLength(); 
        m_sFileAccept.Send(&myFileLength, 4); 
        byte* data = new byte[myFileLength]; 
    
        // Inhalt senden
        myFile.Read(data, myFileLength);
        m_sFileAccept.Send(data, myFileLength); 
    
        myFile.Close();
        delete data;
    
        m_sFile.Close();
        m_sFileAccept.Close();
    

    Hier sendet der Server ja die Datei in einem durch ...
    Ich hab echt kein Plan .... 😞

    plz help



  • Das ist mit Deinem Ansatz auf der Serverseite nicht möglich.



  • Ich bin für jeden anderen Ansatz dankbar ... 😉


Anmelden zum Antworten