例如:我在MS DOS上,我在C:\ Documents and Settings \ Programs文件夹中有一个源代码。我可以使我的源代码使用随机文件夹中的程序(例如gnuplot)吗?
答案 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)
以下是一些选项:
理想情况下,你会做所有3