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

Тема в разделе "Общие вопросы по С и С++", создана пользователем ZigaZaga, 10 окт 2010.

  1. ZigaZaga

    ZigaZaga Гость

    Добрый день!
    В одной папке лежит 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;
    }
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    И не откроит.... Ты в консоле если запускаешь его сделай что бы у тебя текущая директория была с этим файлом, либо прописывай жесткий путь... И тут впринципи плевать что у тебя папка с файлом в path прописана.... Ну или рализуй доступ к системным переменным и перебирай все пути Path...

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

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

    ZigaZaga Гость

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Смотри, все очень просто... Ты когд через проводник запускаешь процесс идет такой, например:
    Файл у тебя лежит 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;
    }
     
  5. ZigaZaga

    ZigaZaga Гость

    большое спасибо Вам
     
Загрузка...

Поделиться этой страницей