ifstream :: aperto non funziona in modalità di debug Visual Studio
-
18-09-2019 - |
Domanda
Sono stato in tutto le domande ifstream qui su SO e sto ancora avendo difficoltà a leggere un file di testo semplice. Sto lavorando con Visual Studio 2008.
Ecco il mio codice:
// CPPFileIO.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <fstream>
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream infile;
infile.open("input.txt", ifstream::in);
if (infile.is_open())
{
while (infile.good())
cout << (char) infile.get();
}
else
{
cout << "Unable to open file.";
}
infile.close();
_getch();
return 0;
}
mi hanno confermato che il input.txt file si trova nella "directory di lavoro" corretta controllando il valore di argv[0]
. Il metodo Open semplicemente non funzionerà.
Inoltre sto avendo difficoltà debugging- dovrebbe non essere in grado di impostare un orologio sul infile.good()
o infile.is_open()
? Continuo a ricevere
Error: member function not present.
EDIT:. il codice elenco aggiornato con il codice completo da file cpp
UPDATE: Il file non è stato nella directory di lavoro corrente. Questa è la directory dove il file di progetto si trova. Spostato lì e funziona durante il debug in VS.NET.
Soluzione
Provare a utilizzare l'operatore OR quando si specifica la modalità di apertura.
infile.open ("input.txt", ios::ate | ios::in);
Il href="http://www.cplusplus.com/reference/iostream/ios_base/openmode/" rel="nofollow noreferrer"> openMode parametro ios::ate viene utilizzato per aprire il file per aggiungere, e ios::in
viene utilizzato per aprire il file per la lettura di input.
Se si desidera solo per leggere il file, probabilmente si può semplicemente usare:
infile.open ("input.txt", ios::in);
La modalità di apertura predefinito per un ifstream è ios :: in, in modo da poter sbarazzarsi di che complessivamente ora. Il seguente codice sta lavorando per me usando g ++.
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
int main(int argc, char** argv) {
ifstream infile;
infile.open ("input.txt");
if (infile)
{
while (infile.good())
cout << (char) infile.get();
}
else
{
cout << "Unable to open file.";
}
infile.close();
getchar();
return 0;
}
Altri suggerimenti
A volte Visual Studio mette il file exe lontano dal codice sorgente. Per impostazione predefinita VS può apparire solo per il file a partire dal file exe. Questo processo è un passo semplice per ottenere il file txt input dalla stessa directory del codice sorgente. Se non si vuole risolvere la configurazione IDE.
using namespace std;
ifstream infile;
string path = __FILE__; //gets source code path, include file name
path = path.substr(0,1+path.find_last_of('\\')); //removes file name
path+= "input.txt"; //adds input file to path
infile.open(path);
Speriamo che questo aiuta altre persone per una soluzione rapida. Mi c'è voluto un po 'per trovare questa configurazione me stesso.
Ho trovato due problemi nel codice:
a) errore di sintassi in "ios :: mangiato || ios :: in" => dovrebbe essere "ios :: mangiato | ios :: in"
b) "ios :: mangiato" imposta il cursore alla fine del file - così si ottiene nulla quando si inizia la lettura
Quindi, solo rimuovere "ios :: mangiato" e si sta bene:)
Ciao, Chris
infile.open ("input.txt", ios::ate || ios::in);
||
è la logica o l'operatore, non l'operatore bit a bit (come ha detto Bill The Lizzard).
quindi credo che si sta facendo l'equivalente di:
infile.open ("input.txt", true);
(supponendo né ios :: mangiato o ios :: in sono 0)
Provare a utilizzare:
ifstream fStm("input.txt", ios::ate | ios::in);
Sono anche problemi debugging- non dovrei essere in grado di impostare un orologio sul "infile.good ()" o "infile.is_open ()"? Continuo a ricevere "Errore:. Funzione membro non presente"
e il corretto comprende:
#include <fstream>
ecc.