Как использовать программу, которой нет в папке с исходным кодом? - PullRequest
0 голосов
/ 09 января 2009

Например: я в MS DOS, у меня есть исходный код в папке C: \ Documents and Settings \ Programs. Могу ли я заставить мой исходный код использовать программу (например, gnuplot), которая находится в случайной папке?

Ответы [ 5 ]

2 голосов
/ 09 января 2009

http://www.codeproject.com/KB/system/newbiespawn.aspx

ShellExecute изучит переменную среды PATH, поэтому вам не нужно указывать полный PATH. Теперь, если это действительно случайное местоположение и его нет даже в переменной окружения PATH, тогда, я думаю, вам не повезло.

Если их нет даже в PATH, вам нужно искать его в папке кандидатов. Вот пример кода о том, как пройти путь файловой системы в C ++.

И пример использования Boost:

directoryList.h

#ifndef DIRECTORYLIST_H_INCLUDED
#define DIRECTORYLIST_H_INCLUDED
#define BOOST_FILESYSTEM_NO_DEPRECATED

#include <iostream>
#include <list>
#include <string>


class directoryList {

    public:
        directoryList();
        ~directoryList();
        std::list<std::string> getListing(std::string path);
};
#endif // DIRECTORYLIST_H_INCLUDED

directoryList.cpp

#include "boost/filesystem/operations.hpp"
#include "boost/filesystem/convenience.hpp"
#include "boost/filesystem/path.hpp"
#include "boost/progress.hpp"

#include "directoryList.h"

using namespace std;
namespace fs = boost::filesystem;

directoryList::directoryList() {}
directoryList::~directoryList() {}

list<string> directoryList::getListing(string base_dir) {

    list<string> rv;
    fs::path p(base_dir);

    for (fs::recursive_directory_iterator it(p); 
         it != fs::recursive_directory_iterator(); ++it) {

        string complete_filename = it->path().string();
        rv.insert(rv.begin(),complete_filename);

    }

    return rv;

}

Пример использования:

directoryList *dl = new directoryList();
filenames = dl->getListing("C:\\Program Files");
//search for the file here, or modify the getListing to supply a filter
0 голосов
/ 09 января 2009

Вот несколько вариантов:

  1. Поиск в системном PATH исполняемого файла, который вы хотите запустить
  2. Разрешить пользователю указывать расположение в командной строке
  3. Сохранить местоположение в файле конфигурации и позволить пользователю указать его во время установки (если у вас есть процесс установки) или путем редактирования файла вручную

В идеале вы бы сделали все 3

0 голосов
/ 09 января 2009

Как сказал Винко, переменная окружения PATH определяет, где Windows будет искать программные файлы.

Обычно лучше избегать жесткого кодирования пути исполняемого файла в вашу скомпилированную программу. Даже если gnuplot находится в определенной папке на вашем компьютере, он может не находиться в той же папке на чужом компьютере. Это может привести к сбою вашего вызова другой программе. Вы можете сохранить его в реестре и позволить пользователю настроить местоположение программы или предоставить программу установки, которая его искала.

0 голосов
/ 09 января 2009

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

Пожалуйста, взгляните на переменную окружения PATH в Windows - это способ обнаружения программ. Это разделенный точкой с запятой список каталогов, в которых Windows ищет исполняемые файлы, BAT-файлы и библиотеки DLL. К этому списку добавляется текущий каталог и (я думаю) место, где находится ваш EXE-файл.

ПУТЬ устанавливается в Windows XP из виджета панели управления системой. Вкладка «Дополнительно» Кнопка «Среда». В Vista все сложнее - вам нужно это делать от имени администратора.

0 голосов
/ 09 января 2009

Также есть некоторые основные функции _exec / exec и его модификации. Аналогичные функции доступны для Linux.

...