C ++ проблемы при попытке открыть файл .txt с помощью Ifstream

голоса
-1

Этот небольшой кусочек кода предназначен для просматривать текстовый файл и определить номера счетов, которые уже были написаны так, что в дальнейшем в моей программе, вы можете найти правильный счет без ошибки двух учетных записей с таким же номером счета (ID) , Но не важно, что я делаю, его использование ли два раза подряда, слеша, или двойной слеша в месте для объекта ifstream; я всегда получаю «не может найти файл», как выход.

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

в окнах, расположение текстового файла G: \ Coding \ Test \ Test \ Test \ accounts.txt

Задан 03/12/2019 в 00:03
источник пользователем
На других языках...                            


1 ответов

голоса
0

std::ifstreamможно использовать относительные пути, а также абсолютные. Для вашей проблемы, я бы рекомендовал смотреть в <filesystem>заголовок из STL , если вы на самом деле нужен абсолютный путь к файлу. Однако, если он находится в том же каталоге, что и ваш рабочий каталог, вам не нужно использовать абсолютные пути. Вот как я бы выполнить свою задачу

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

А кое - что о коде стилистически говоря. Во- первых, вы никогда не должны быть using namespace std, и (если вы по какой - то причине) не существует оснований смешивать и сочетать с указанием stdимен только на некоторых stdчленов. Во- вторых, вам не нужно указать elseдля каждого if-statement, и вы , вероятно , не следует , если есть на самом деле представляют собой команды для выполнения , если elseдело будет достигнуто.

редактировать

Если вам все еще нужно абсолютный путь, вот как вы можете сделать это:

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

Ответил 03/12/2019 в 01:18
источник пользователем

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