#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 на самом деле сделал очень хорошее замечание и является правильным. Я обновил ответ, чтобы отразить это, а также устранить любую путаницу, которую могло вызвать мое упрощение.