例: 私は MS DOS を使用しており、C:\Documents and Settings\Programs フォルダにソース コードがあります。ランダムなフォルダにあるプログラム (gnuplot など) をソース コードで使用することはできますか?
5 に答える
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
ディレクトリリスト.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
ここにいくつかのオプションがあります:
- システムPATHで、実行する実行可能ファイルを検索します
- ユーザーがコマンドラインで場所を指定できるようにする
- 場所を構成ファイルに保存し、ユーザーがインストール中に(インストールプロセスがある場合)、またはファイルを手動で編集して指定できるようにします
理想的には、3つすべてを実行します
Vinko が言ったように、PATH 環境変数は、Windows がプログラム ファイルを探す場所を決定します。
通常、実行可能ファイルのパスをコンパイル済みプログラムにハードコーディングしないことをお勧めします。gnuplot があなたのマシンの特定のフォルダーにあるとしても、他の誰かのコンピューターの同じフォルダーにあるとは限りません。これにより、他のプログラムへの呼び出しが失敗します。レジストリに保存して、ユーザーがプログラムの場所を構成できるようにするか、それを検索するインストーラーを提供することができます。
ソース コードの場所は、system() 呼び出しによってプログラムが配置される方法とは関係ありません (その呼び出しを使用すると仮定します)。関連する唯一の考慮事項は、コンパイルされた実行可能ファイルの場所です。
Windows の PATH 環境変数を見てください。これがプログラムの検索方法です。これは、Windows が実行可能ファイル、BAT ファイル、および DLL を検索するディレクトリをセミコロンで区切ったリストです。そのリストには、現在のディレクトリと(私が思うに)あなたのEXEがある場所が追加されます。
Windows XP では、システム コントロール パネル ウィジェットの [詳細設定] タブの [環境] ボタンから PATH が設定されます。Vista の場合、状況はより複雑です。管理者として実行する必要があります。
また、いくつかのコア関数_exec/execとその変更があります。Linux でも同様の機能を利用できます。