Frage

Ich habe auf SO hier alle über die ifstream Fragen, und ich habe immer noch Probleme, eine einfache Textdatei zu lesen. Ich arbeite mit Visual Studio 2008.

Hier ist mein Code:

// 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;
}

Ich habe bestätigt, dass die input.txt Datei im richtigen „Arbeitsverzeichnis“ wird durch den Wert von argv[0] überprüfen. Die Open-Methode einfach nicht funktionieren.

Ich habe auch Schwierigkeiten debugging- soll ich eine Uhr eingestellt auf infile.good() oder infile.is_open() nicht in der Lage sein? Ich erhalte

Error: member function not present.

EDIT:. aktualisierte Codeliste mit vollständigem Code von CPP-Datei

UPDATE: Die Datei wurde nicht im aktuellen Arbeitsverzeichnis. Dies ist das Verzeichnis, in dem die Projektdatei befindet. Bewegt es dort und es funktioniert, wenn in VS.NET debuggen.

War es hilfreich?

Lösung

Versuchen Sie, den bitweisen OR-Operator verwenden, wenn der Open-Modus angeben.

infile.open ("input.txt", ios::ate | ios::in);

Die openmode Parameter ist eine Bitmaske. ios::ate wird verwendet, um die Datei zu öffnen, zum Anhang und ios::in verwendet wird, um die Datei zu öffnen, für die Eingabe zu lesen.

Wenn Sie nur die Datei lesen möchten, können Sie wahrscheinlich nur verwenden:

infile.open ("input.txt", ios::in);

Der Standard-Offen-Modus für eine ifstream ios ist :: in, so dass Sie loswerden, dass insgesamt jetzt bekommen kann. Der folgende Code wird für mich arbeiten g ++ verwenden.

#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;
}

Andere Tipps

Manchmal Visual Studio setzt Ihre EXE-Datei aus dem Quellcode entfernt. Standardmäßig sucht VS darf nur für die Datei von Ihrer EXE-Datei starten. Dieser Prozess ist ein einfacher Schritt für das Erhalten des Eingang txt-Datei aus dem gleichen Verzeichnis wie Quellcode. Sollten Sie nicht Ihre IDE-Setup beheben möchten.

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);

Hoffentlich hilft das anderen Menschen für eine schnelle Lösung. Es dauerte eine Weile, dieses Setup selbst zu finden.

Ich habe zwei Probleme im Code gefunden:

a) Syntaxfehler in "ios :: ate || ios :: in" => sollte "ios :: ate | ios :: in"

b) „ios :: ate“ setzt den Cursor an das Ende der Datei - damit Sie nichts, wenn Sie anfangen zu lesen

So entfernen Sie einfach "ios :: ate" und Sie sind gut:)

ciao, Chris

infile.open ("input.txt", ios::ate || ios::in);

|| ist die logische oder Betreiber, nicht der bitweise Operator (als Bill Die Lizzard sagte).

, so dass ich denke, dass Sie das Äquivalent zu tun:

infile.open ("input.txt", true);

(weder ios vorausgesetzt :: aß oder ios :: in sind 0)

Versuchen Sie es mit:

ifstream fStm("input.txt", ios::ate | ios::in);
  

Ich habe auch Schwierigkeiten debugging- soll ich nicht in der Lage sein, eine Uhr setzen auf „infile.good ()“ oder „infile.is_open ()“? Ich erhalte „Fehler:. Member-Funktion nicht vorhanden“

und die richtige beinhaltet:

#include <fstream> 

etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top