Программа не находит относительный файл при запуске из Visual Studio

#c #visual-c #fstream

#c #visual-c #fstream

Вопрос:

Я использую Visual studio 2019. Я выполнял этот процесс, чтобы попытаться прочитать данные из файлов, но в Visual Studio я не могу. Он просто показывает пустой экран, без ошибок или чего-то подобного. Затем я использовал интерактивную среду разработки, но программа смогла прочитать файл онлайн. Я не могу разобраться в проблеме. Это один и тот же код, который используется в обоих.

Любая помощь будет оценена. Заранее благодарю вас.

Ниже приведен написанный код:

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

int main() {

    ifstream inputfile;
    string name1, name2, name3;

    inputfile.open("names.txt");

    inputfile >> name1;
    inputfile >> name2;
    inputfile >> name3;

    inputfile.close();

    cout << name1 << endl;
    cout << name2 << endl;
    cout << name3 << endl;


    return 0;
}
  

Комментарии:

1. вы пытались указать определенный путь, например «C:\names.txt «? если это работает, проверьте ваш «name.txt » расположите и убедитесь, что это правильно

2. что произойдет, если вы нажмете f10 и пройдетесь по своему коду?

Ответ №1:

Когда вы запускаете свои проекты из Visual Studio, ваш текущий рабочий каталог становится тем, где main.cpp находится ваш (см. Примечание в конце), а не исполняемый каталог. Поэтому ваша программа не может найти names.txt и, следовательно, то, что вы видите.

Таким образом, вы можете убедиться в этом, перейдя в свой каталог Release / Debug (в зависимости от того, для какой конфигурации вы создаете свой проект) и запустите свою программу. Вы увидите, что он найдет файл и будет работать просто отлично.

Вы можете изменить свой рабочий каталог из PropertiesDebugging working directory параметра и установить для него что-то вроде : $(SolutionDir)$(Platform)$(Configuration)

Вот простая демонстрация того, как это на самом деле работает в действии:

введите описание изображения здесь

Примечание

Я предполагаю, что ваш main.cpp находится внутри каталога вашего проекта, где .vcxproj и подобные находятся. Поэтому правильнее сказать, что текущий рабочий каталог по умолчанию находится там, где находится ваш project file ( .vcxproj ), а не ваши файлы cpp, поскольку они могут быть размещены где угодно.

Комментарии:

1. извините за тупость. я вроде как новичок в этом. итак, вы говорите, что .cpp, с которым я сейчас работаю, — это то, где должен быть файл (из которого я хочу считывать данные)? я переместил файл в этот исходный файл .cpp, но все та же проблема.

2. Вы используете относительный путь, и эта относительность обычно зависит от того, откуда выполняется ваша программа. Это называется текущим рабочим каталогом. по сути, когда вы запускаете свой исполняемый файл, и ваша программа достигает names.txt , она сначала выполняет поиск в текущем рабочем каталоге, т.Е. В том же каталоге, из которого запускается ваш исполняемый файл. при запуске / отладке из Visual Studio текущий рабочий каталог устанавливается в качестве текущего каталога проекта, в котором находится ваш cpp-файл. следовательно, когда ваша программа пытается найти файл, он не существует в текущем рабочем каталоге

3. т.е. в каталоге вашего проекта, где существует ваш cpp-файл.

4. То, что говорит @Rika, верно. Во время отладки вы можете задать параметры отладки проекта, чтобы задать рабочий каталог. Если вы укажете рабочий каталог, в котором находится файл, он откроется. В противном случае на выходе компилятора по умолчанию .exe-файл помещается в каталог . debug по отношению к файлу .vcxproj. (обычно) Поскольку exe-файл и текстовый файл находятся в разных каталогах, он всегда завершается ошибкой.

5. Я также должен добавить, что я предполагал, что ваш .cpp-файл находится рядом с файлами вашего проекта. @JosephWillcoxson на самом деле сделал очень хорошее замечание и является правильным. Я обновил ответ, чтобы отразить это, а также устранить любую путаницу, которую могло вызвать мое упрощение.