Visual studio code non mi legge i file ifstream

di Carlos_Sainz il
7 risposte

Sto imparando ora a programmare, nello specifico c++, ho gia scritto svariati programmi alcuni dei quali prevedevano la letture di file esterni di tipo .txt e sono sempre andati.Avendo avuto dei problemi con il debbugger avevo disinstallato e ri-installato Visual studio code e Ubuntu dato che lo utilizzavo tramite WSL e da quel momento in poi non legge piu gli altri file ifstream correttamente, nel senso che mi segna i numeri come 0 o 1 e gli altri caratteri con questo simbolo “?” quando eseguo il programma.
Non capisco se è qualcosa di sitemabile dalle impostazioni o se mi sono perso qualcosa quando l'ho ri-installato, grazie a chiunque mi darà una mano.

7 Risposte

  • Purtroppo non si e' capito “na cippa”.

    Visual Studio Code, fondamentalmente, e' un “editor agli steroidi” nel senso che potresti usare anche Notepad e andrebbe bene lo stesso.
    Lui, con i problemi con istream, centra nello stesso modo in cui centri tu con una “supermodella” ;-)
    Nulla, nisba, niet, nada, …

    Uno “ifstream” e' un oggetto per leggere file “binari” e NON caratteri.
    La lettura dei caratteri da un file binari richede tutta una serie di accorgimenti, uno dei quali e' SPECIFICARE l'encoding con cui e' scritto il file di TESTO.
    SE leggi un file BINARIO, QUALUNQUE si l';encoding otterai sempre “schifezze”

    SE leggi un file DI TESTO con l'encoding SBAGLIATO, dovrebbe fare pasticci SOLO sulle accentate.
    Dico dovrebbe, perche' anche l'encoding e' un mondo.

    Quindi, riassumendo, 

    che stai combinando???

  • Ho specificato che sto usando Visual Studio Code solo per contestualizzare,comunque non è questo il punto.
    Come encoding sto usando il suo predefinito ovvero UTF-8 ma ho provato anche con UTF-8 con BOM dopo aver letto la documentazione a riguardo sul sito di Microsoft, ma visto quello che mi dici dubito che sia quello il problema e dubito che sia una semplice impostazione da correggere dunque, visto anche che il file da leggere è un normalissimo file di testo creato anch'esso in visual studio (sempre per contestualizzare).

    Per il resto non ti so dire altro,mi rendo conto di essere ignorante in materia ma è il motivo per cui ho chiesto aiuto in questo forum, sperando che fosse un problema piu facilmente interpretabile.

  • Ignorante va bene ma le basi le devi avere.

    Prima di tutto perché scrivi nell'area Windows e non nella sezione C/C++?

    E perché non mostri il codice che hai scritto e che non va?

    Somiglia a qualcosa del genere?

    std::ifstream file("my_file");
     std::string temp;
     while(std::getline(file, temp)) {
          //Do with temp
     }
  • Ma ripeti la stessa risposta di prima?

  • Scusa ho ricaricato la pagina e non mi sono accorto che stava mandando nuovamente il messaggio precedente,comunque non capisco cosa ti abbia portato a pensare che non “abbia le basi” mi pare piuttosto che non si riesca a inquadrare bene il problema.

    Il codice te lo posso anche inviare, ma non è quello il problema ne sono sicuro perche è un programma banalissimo ed è il motivo per cui non scrivo nella sezione C/C++  ovvero che appunto non è un problema di codice, ripeto ho gia fatto programmi che prevedevano la lettura di altri file e sono sempre andati e tutt'ora vanno e sottolineo tutt'ora perchè questo mi conferma che non è l'encoding sbagliato, e in realtà dubito che sia una soluzione “semplice” come appunto cambiare encoding, speravo semplicemente che qualcuno magari avendo gia affrontato questo problema fosse in grado intuirne il motivo.

    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int n, a;
        char c;
        ifstream inFile("esprova.txt");
    
        inFile >> n;
        inFile >> c;
        inFile >> a;
    
        cout << endl
             << n << " " << a << c;
    
        inFile.close();
    
        return 0;
    }
  • Il codice che hai postato dovrebbe funzionare.

    Non è che hai sbagliato il nome del file, tipo “eprova.txt”, che l'hai chiamato “.txt.txt”, che hai sbagliato percorso o cose del genere?

    Aggiungi il file alle risorse del progetto e controlla che il file sia stato aperto davvero, tipo

        int n = 999, a = 888; // valori dummy
        char c = 'c';
        ifstream inFile("esprova.txt");
    
        if (!inFile) {
            cout << "errore";
            return -1;
        }
  • Inserisci il percorso assoluto c:\\cartella\\file.txt

Devi accedere o registrarti per scrivere nel forum
7 risposte