如何使用不在源代码文件夹中的程序?

时间:2009-01-09 11:02:26

标签: c++ dos

例如:我在MS DOS上,我在C:\ Documents and Settings \ Programs文件夹中有一个源代码。我可以使我的源代码使用随机文件夹中的程序(例如gnuplot)吗?

5 个答案:

答案 0 :(得分:2)

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

ShellExecute将查看PATH环境变量,因此您无需指定完整的PATH。现在,如果它真的是一个随机位置,它甚至不在PATH环境变量中,那么我猜你运气不好。

如果它们甚至不在PATH中,那么你必须在候选人文件夹中搜索它。以下是有关如何在C ++中使用traverse a file system路径的示例代码。

使用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

答案 1 :(得分:0)

还有一些核心功能_exec/exec及其修改。类似的功能可用于Linux。

答案 2 :(得分:0)

源代码的位置与system()调用程序的定位方式无关(我假设您使用该调用)。唯一相关的考虑因素是编译后的可执行文件的位置。

请查看Windows中的PATH环境变量 - 这是找到程序的方式。它是一个以分号分隔的目录列表,其中Windows查找可执行文件和BAT文件和DLL。到那个列表,当前目录和(我认为)前面的EXE所在的位置。

在Windows XP中从“系统”控制面板小组件“高级”选项卡“环境”按钮设置PATH。对于Vista来说,事情变得更复杂 - 你需要以管理员的身份来做。

答案 3 :(得分:0)

正如Vinko所说,PATH环境变量决定了Windows查找程序文件的位置。

通常最好避免将可执行文件的路径硬编码到已编译的程序中。即使gnuplot位于您计算机上的特定文件夹中,它也可能不在其他人计算机上的同一文件夹中。这会导致您对其他程序的调用失败。您可以将其存储在注册表中,让用户配置程序位置,或者提供搜索它的安装程序。

答案 4 :(得分:0)

以下是一些选项:

  1. 在系统路径中搜索您要运行的可执行文件
  2. 允许用户在命令行上指定位置
  3. 将位置存储在配置文件中,并允许用户在安装期间指定它(如果您有安装过程)或手动编辑文件
  4. 理想情况下,你会做所有3