программа не открывает файл если вызывать её из командной строки

  • Автор темы ZigaZaga
  • Дата начала
Z

ZigaZaga

#1
Добрый день!
В одной папке лежит exe-файл содержащий этот простой "код" и файл с именем "file".
Переменная среды PATH содержит путь к папке с этими двумя файлами.
Когда запускаю ехе-файл кликом, или нажатием enter, пишет что открыл файл.
Когда же запускаю из командной строки, пишет что НЕ открыл файл!
Из-за чего это происходит???

ведь я не передаю даже никаких параметров.

(Windows 7 , MSVC 2010 Ultimate Edition)

C++:
#include <fstream>
#include <iostream>

using namespace std;

int main(void)
{
fstream file("file", std::ios::in);
if(!file.is_open())
cout << "no open" << endl;
else
cout << "OPEEEN" << endl;
system("pause");
return 0;
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
И не откроит.... Ты в консоле если запускаешь его сделай что бы у тебя текущая директория была с этим файлом, либо прописывай жесткий путь... И тут впринципи плевать что у тебя папка с файлом в path прописана.... Ну или рализуй доступ к системным переменным и перебирай все пути Path...

кстати закрывай всегда навский пожарны дескриптер файла...

P.S.> Кстати в MS много таких программ где доступ к PATH папкам не учтен)) к примеру notepad, так что не бери в голову, cmd->cd ПАПКА с фалом->имяпрограммы.exe и все будет ок) либо чуть сложнее с параметрамми
 
Z

ZigaZaga

#3
DarkKnight125, спасибо за ответ.
Могли бы Вы объяснить с чем связано такое различное поведение???
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
Смотри, все очень просто... Ты когд через проводник запускаешь процесс идет такой, например:
Файл у тебя лежит C:\1\2\3\file
Грубо, ты открыл Мой Компьютер, потом открыл диск С
это аналогично что в консоле ты написл cd /d C:\
cd C:\
потом по папкам прошелся
cd 1
cd 2
cd 3
Вот, ты видишь в проводнике все файлы папки 3, включая твой file
тоесть CurrentDir у тебя равен C:\1\2\3\
именно в ней когда ты запускаешь в проводнике и ищит твой файл твоя программа.

Когда же ты запустик консоль, CurrentDir у тебя (для W7) Диск:\User\Имяпользователя\
ты можешь ввести в консоле название exe программы и так как у тебя Path прописан, он ее запустит, но искать она файл будет все равно в CurrentDir (Диск:\User\Имяпользователя\)


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

C++:
#include <fstream>
#include <iostream>

using namespace std;

int main(void)
{
system("dir"); //Показать файлы в текущей папке

std::cout<<endl;
fstream file("file", std::ios::in);
if(!file.is_open())
cout << "no open" << endl;
else
cout << "OPEEEN" << endl;

file.close(); //Закроем дескриптер файла
system("pause");
return 0;
}