Domanda Risolto La funzione getline non riporta tutto il contenuto di un file di testo[C++]

DanyDollaro

Utente Electrum
14 Luglio 2018
148
41
58
138
Ultima modifica:
Salve a tutti, come dal titolo il seguente codice memorizza la prima riga di un file, la mostra a schermo e poi fa la stessa cosa con la riga successiva e così via:
C++:
#include <fstream>
#include <string>
#include <iostream>
using namespace std;

int main()
{
    string line;
    ifstream iFile("FileDiTesto.txt");

    if (iFile.is_open())
    {
        while (getline(iFile, line))
        {
            cout << line;
        }
        iFile.close();
    }
    else cout << "Unable to open file";

    return 0;
}
però ho notato che non funziona con tutti i file.

Avevo provato a far uscire a schermo le sringhe di un *.exe convertito in un file di testo e ne riportava solo una piccola parte perchè ad un certo punto la funzione getline smette di funzionare (uscendo dal ciclo).

Ho provato a spostare la funzione getline dentro al ciclo e mettendo un "1" come condizione del while:
C++:
while (1)
   {
      getline(iFile, line)
      cout << line;
   }
Ma quello che fa è semplicemente mandare il loop la stessa stringa.

purtroppo non posso copiare il file su questa discussione dato che i suoi caratteri verrebbero scambiati, nel caso vogliate aiutarmi lascio un download con Mega del file (è un file di testo di 5.657 Byte) Download File.txt
 
Sta funzionando correttamente, l'unico problema è gli stai passando un file binario che codificato in ASCII non ha alcun senso. Quando esegui il tuo programma, codifica il suo output in base64 usando ./eseguibile | base64 (linux). Nel caso non lo sapessi, base64 è una codifica binary-to-text: prende una stringa binaria e la trasforma in ASCII.
 
  • Mi piace
Reazioni: DanyDollaro
Ultima modifica:
Sta funzionando correttamente, l'unico problema è gli stai passando un file binario che codificato in ASCII non ha alcun senso. Quando esegui il tuo programma, codifica il suo output in base64 usando ./eseguibile | base64 (linux). Nel caso non lo sapessi, base64 è una codifica binary-to-text: prende una stringa binaria e la trasforma in ASCII.
Grazie St3ve per il tuo aiuto :D ho risolto aprendo il file in modalità binaria