C ++ problema cercando di aprire un file txt con ifstream

voti
-1

Questa piccola porzione di codice è stato progettato per guardare attraverso un file di testo e identificare i numeri di conto che sono già state scritte in modo che in seguito nel mio programma, è possibile trovare l'account corretto, senza l'errore di due account con lo stesso numero di conto (id) . Ma non importa quello che faccio, se il suo utilizzo doppie barre rovesciate, barre, o doppie barre avanti nel percorso per l'oggetto ifstream; Ho sempre trovato non può trovare il file come l'uscita.

#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 Windows, il percorso del file di testo è G: \ Coding \ Test \ test \ test \ accounts.txt

È pubblicato 03/12/2019 alle 00:03
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

std::ifstreampuò usare percorsi relativi nonché quelli assoluti. Per il vostro problema, io consiglierei di guardare in <filesystem>un colpo di testa da STL se avete davvero bisogno di un percorso assoluto al file. Tuttavia, se è nella stessa directory come la directory di lavoro, non è necessario utilizzare percorsi assoluti. Ecco come mi piacerebbe compiere il proprio compito

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

Un paio di cose circa il vostro codice stilisticamente parlando. In primo luogo, non si dovrebbe mai essere using namespace std, e (se si è per qualche motivo), non v'è un motivo per mescolare e abbinare specificando il stdnamespace solo su alcuni stdmembri. In secondo luogo, non è necessario specificare un elseper ogni if-affermazione, e probabilmente non dovrebbe in realtà meno che non ci sono comandi da eseguire se la elsesi raggiunge caso.

modificare

Se hai ancora bisogno di un percorso assoluto, ecco come si può fare:

#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... */
}

Risposto il 03/12/2019 a 01:18
fonte dall'utente

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