Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C++]WxWidgets. Salvare wxInputStream in file

    Salve a tutti.

    Sfruttanto la classe wxFTP ho scaricato dal mio server un file sul buffer wxInputStream. A questo punto però dovrei salvarlo su hd. Tra i metodi elencati nel repository non ho trovato nulla che assomigli a SaveToFile(*FILE); del C++Builder.
    Ho usato la classica soluzione (anche se crea problemi l'Eof: non termina mai il ciclo), ma speravo ci fosse qualcosa di più immediato.
    codice:
    FILE *fo=fopen("nomefile.rar","w+b");
    while(!in->Eof())
     { fprintf(fo,"%c",in->GetC()); }
    fclose(fo);
    Grazie mille per l'aiuto

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Non ho alcuna idea dello strumento che stai utilizzando, ma provo a buttarla lì: sei certo che non esista un metodo che faccia avanzare il "cursore virtuale" che definisce la tua posizione nel file? magari, se quel metodo non viene chiamato, il cursore non si sposta e quindi Eof vale sempre False.

    Tieni comunque a mente ciò che ho detto all'inizio...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    puo darsi che si blocchi perche non ci sono dati disponibili da leggere?

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  4. #4
    Allora il file dentro lo stream esiste e scorre, quindi mi viene creato il relativo file su hd. Purtroppo però il ciclo non termina. Se uso un file di testo esso viene creato ma alla fine vengono create una serie di 'ý' (236)ascii.

    Con lo stesso file di testo ho provato a modificare la condizione in: in->Peer()!=EOF e funziona (Peer è identico a GetC ma non fa scorrere il cursore nello stream)
    Purtroppo non funziona con file come i .rar

    Grazie

  5. #5

  6. #6
    ancora up nella speranza di un'anima pia


  7. #7
    Originariamente inviato da Ephestus
    ancora up nella speranza di un'anima pia


  8. #8
    Mi è stato consigliato di usare la classe wxFile. Ho perciò provato con wxFile, wxFFile, wxStreamBuffer, wxOutputStream, ma con scarsissimi risultati. Ho letto e riletto i resource di tutte le classi ma non c'è nulla da fare. Non riesco a salvare lo stream su file.
    Ad esempio questo
    codice:
    wxFile *fo = new wxFile();
    fo->Create("wxWindows-4.2.0.tar.gz",true);
    fo->Write(data,size); // o anche (in,size);
    fo->Close();
    sembrerebbe essere corretto eppure non funziona. Ho tentato molti altri algoritmi, ma nessuno ha portato ad una conclusione. Potete darmi una mano a capire dove erro??

    p.s. Quello spezzone di codice andrebbe inserito sotto il commento in grassetto
    codice:
    wxFTP ftp;
    
    
    
        // if you don't use these lines anonymous login will be used
    
        ftp.SetUser("user");
    
        ftp.SetPassword("password");
    
    
    
        if ( !ftp.Connect("ftp.wxwindows.org") )
    
        {
    
            wxLogError("Couldn't connect");
    
            return;
    
        }
    
    
    
        ftp.ChDir("/pub");
    
        wxInputStream *in = ftp.GetInputStream("wxWindows-4.2.0.tar.gz");
    
        if ( !in )
    
        {
    
            wxLogError("Coudln't get file");
    
        }
    
        else
    
        {
    
            size_t size = in->StreamSize();
    
            char *data = new char[size];
    
            if ( !in->Read(data, size) )
    
            {
    
                wxLogError("Read error");
    
            }
    
            else
    
            {
    
                // file data is in the buffer
    
                ...
    
            }
    
    
    
            delete [] data;
    
            delete in;
    
        }
    Grazie mille

  9. #9

  10. #10
    Ho trovato questa funzione: wxTransferStreamToFile . peccato però che non riesca a capire come funziona: usata così wxTransferStreamToFile(in,"nome.est"); mi dà come errore invalid initialization of reference of type 'wxInputStream&' from expression of type 'wxInputStream*'. Ho capito che erro passandogli il puntatore allo stream... ma se nn gli passo in che diamine gli do' ???
    Sto diventando matto... vi prego HELP!

    Grazie


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.