Le problème C de tenter d'ouvrir un fichier .txt à l'aide ifstream

voix
-1

Ce petit morceau de code est conçu pour regarder à travers un fichier texte et d'identifier les numéros de compte qui ont déjà été écrites afin que plus tard dans mon programme, vous pouvez trouver le bon compte sans l'erreur de deux comptes avec le même numéro de compte (id) . Mais peu importe ce que je fais, si son utilisation de doubles barres obliques inversées, des barres obliques vers l'avant, ou doubles barres obliques vers l'avant dans l'emplacement de l'objet ifstream; je reçois toujours « ne peut pas trouver le fichier » comme la sortie.

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

dans les fenêtres, l'emplacement du fichier texte est G: \ codage \ Test test \ test \ accounts.txt de

Créé 03/12/2019 à 00:03
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

std::ifstreampeuvent utiliser des chemins relatifs, ainsi que absolus. Pour votre problème, je vous recommande de regarder dans l' en- <filesystem>tête de la STL si vous vraiment besoin d' un chemin absolu vers votre fichier. Cependant, si elle est dans le même répertoire que votre répertoire de travail, vous n'avez pas besoin d'utiliser des chemins absolus. Voici comment j'accomplir votre tâche

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

Quelques choses sur votre code stylistiquement parlant. Tout d' abord, vous ne devriez jamais être using namespace std, et (si vous êtes pour une raison quelconque) il n'y a pas de raison de mélanger et assortir spécifier l' stdespace de noms que certains stdmembres. Deuxièmement, vous n'avez pas besoin de spécifier une elsepour chaque if-Déclaration, et vous ne devriez probablement pas moins qu'il y ait effectivement des commandes à exécuter si le elsecas est atteinte.

modifier

Si vous avez besoin d'un chemin absolu, voici comment vous pouvez le faire:

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

Créé 03/12/2019 à 01:18
source utilisateur

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