Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VC++] Si blocca... Perchè?

    Salve a tutti.
    In Visual C ho scritto un programma che, alla pressione di un tasto, legge il nome di un file da una Edit Box e lo splitta in tanti spezzoni del numero di byte specificato in un'altra Edit Box.
    IL programma funziona per file piccoli... ma quando intendo spezzare un file "pesante" 1 Mbyte in pezzi da 10 Kb ciascuno, il programma si inchioda, scrivendo solo i primi 500-600.
    Perchè? Il codice è giusto (se serve lo posto) perchè sui file piccoli funziona.
    Io pensavo che fosse un problema del tip che alla pressione di un tasto associo un ciclo while(1) { }, però non so come risolverlo.

    Grazie anticipatamente
    Vincenzo
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

  2. #2
    while(1){} ???
    ma è un ciclo perenne!
    Vladislav III din Sighisoara,
    conte di domnitor al Valahiei
    denumit Tepes sau al Dracului


    ...ce tie nu-ti place altuia nu-i face...

  3. #3
    Giusto, ma il compilatore non può sapere a priori se il ciclo sarà perenne o meno. Se un ciclo è molto lungo, può sembrare perenne, mentre non lo è. Nel mio caso, un file di 1Mb diviso in pezzi da 10K fa 1000 filettini. Ho paura che ci impieghi troppo tempo, per questo si blocchi...
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

  4. #4
    ma quindi non hai scritto nel codice while(1){}?... no, perché mi era venuto un coccolone...

    meglio postare il codice, magari soltanto il ciclo che splitta il file in input
    Vladislav III din Sighisoara,
    conte di domnitor al Valahiei
    denumit Tepes sau al Dracului


    ...ce tie nu-ti place altuia nu-i face...

  5. #5
    #define MAXLENGTH 1024 //10 Kb

    CFile in, out;
    CString sNomeFile;
    int i = 0, spezzoni = 0;
    char nomeFile[10];

    sNomeFile = "c:\\windows\\win.com";

    if(!in.Open(sNomeFile, CFile::modeRead | CFile::typeBinary)) {
    AfxMessageBox("Impossibile aprire il file " + sNomeFile);
    }
    else {

    BYTE input;
    BYTE buffer[MAXLENGTH];

    while(in.Read(&input, 1) > 0) {

    buffer[i] = input;
    i++;
    if(i == MAXLENGTH) {

    itoa(spezzoni, nomeFile, 10);
    strcat(nomeFile, ".txt");

    if(!out.Open(nomeFile, CFile::modeCreate | CFile::modeWrite)) {
    AfxMessageBox("Impossibile aprire il file in SCRITTURA!");
    }
    out.Write(buffer, i);
    out.Close();

    i = 0;
    spezzoni++;
    }
    }
    if (i != 0) {
    itoa(spezzoni, nomeFile, 10);
    strcat(nomeFile, ".txt");

    if(!out.Open(nomeFile, CFile::modeCreate | CFile::modeWrite)) {
    AfxMessageBox("Impossibile aprire l'ultimo file in SCRITTURA!");
    }
    out.Write(buffer, i);
    out.Close();
    }
    in.Close();
    }
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

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 © 2024 vBulletin Solutions, Inc. All rights reserved.