C ++ Problem versucht, eine TXT-Datei zu öffnen, indem ifstream

stimmen
-1

Dieses kleine Stück Code ist so konzipiert, durch eine Textdatei suchen und Kontonummern zu identifizieren, die bereits geschrieben wurden, so dass später in meinem Programm, können Sie das richtige Konto ohne den Fehler von zwei Konten mit derselben Kontonummer (ID) finden . Aber egal, was ich tue, ob seine Verwendung von Doppelschrägstriche, Schrägstriche oder Doppelschrägstriche in der Position für die ifstream Objekt; Ich bekomme immer als die Ausgabe „Datei nicht finden kann“.

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream accountsread(‪G:/Coding/Test/test/test/accounts.txt);
    if (accountsread.is_open()) {
        int tempAccno;
        std::string tempname;
        char tempchar;
        int accountsfound = 0;
        int input;

std::cout << Enter the ID of the account \n;
        cin >> x;

        while (!accountsread.eof()) {
            accountsread >> tempAccno;
            if (tempAccno == input) {
                accountsfound++;
            }
            else {}


        }
        if (accountsfound > 0) {
            cout << number found;
        }
        else {
            cout << number not found;
        }
    }
    else {
        cout << cannot find file;
    }
}

in den Fenstern, die Lage der Textdatei G: \ Codierung \ Test \ test \ test \ accounts.txt

Veröffentlicht am 03/12/2019 um 00:03
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

std::ifstreamkann relative Pfade sowie absolute verwenden. Für Ihr Problem, würde ich Blick in die empfehlen <filesystem>Header aus der STL , wenn Sie wirklich einen absoluten Pfad zu Ihrer Datei benötigen. Wenn es jedoch im gleichen Verzeichnis wie das Arbeitsverzeichnis ist, brauchen Sie keine absoluten Pfade zu verwenden. Hier ist , wie ich Ihre Aufgabe erfüllen würde

#include <iostream>
#include <fstream>
#include <string>  // Should include since you're using std::string

// Note that I am NOT "using namespace std;"

int main()
{
    std::ifstream accountsRead("accounts.txt");
    if (accountsRead.is_open())
    {
        int account_id;
        bool account_found = false;

        std::cout << "Enter the ID of the account: ";
        while (!(std::cin >> account_id))
        { // This loop handles if the user inputs non-number
            std::cout << "Please enter a NUMBER below!\n";
            std::cout << "Enter: ";
            std::cin.ignore(10000, '\n');
            std::cin.clear();
        }

        int tmpAccNum;
        while (accountsRead >> tmpAccNum)
        { // This loop reads the file, line by line, into tmpAccNum
            if (tmpAccNum == account_id)
            {
                account_found = true;
                break;
            }
        }

        if (account_found)
        {
            std::cout << "Number found!" << std::endl;
        }
        else
        {
            std::cout << "Number not found..." << std::endl;
        }
    }
    else
    { // Error opening file
        std::cout << "File not found or is corrupted" << std::endl;
    }
}

Ein paar Dinge über Ihren Code stilistisch sprechen. Zunächst sollen Sie nie sein using namespace std, und (wenn Sie aus irgendeinem Grunde) gibt es keinen Grund , die zu mischen und anzupassen Angabe stdNamensraum nur einige auf stdMitgliedern. Zweitens , Sie brauchen nicht angeben , elsefür jeden if-Anweisung, und Sie sollten wahrscheinlich nicht , es sei denn es gibt tatsächlich Befehle auszuführen , wenn der elseFall erreicht wird.

Bearbeiten

Wenn Sie noch einen absoluten Pfad benötigen, ist hier, wie Sie das tun können:

#include <filesystem>

int main()
{
    // Create path object for the file path
    std::filesystem::path file_path("G:\Coding\Test\test\test\accounts.txt");

    // The '.string()' method for a 'std::path' object returns the string
    // version of the path, so you can use it with an 'std::ifstream'
    std::ifstream accounts(file_path.string());  // Opens file via 'ifstream'
    /* And so on... */
}

Beantwortet am 03/12/2019 um 01:18
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more