我想創建一個程序,在C++中打開另一個.exe
文件,我希望程序能夠從任何目錄運行,所以我不知道完整的地址的文件。在不知道C++完整路徑的情況下打開一個.exe文件
Eg-
我製作的程序將出現在一個文件夾中,該文件夾又包含子文件夾,其中還包含javaportable.exe
。我希望程序運行上面提到的.exe
而不會獲得完整的路徑。正常DOS導航中的cd操作符。另外,如果可能的話,我想選擇另一個.exe
,它將運行通過javaportable.exe
,並且存在於上一個文件夾中。
我想創建一個程序,在C++中打開另一個.exe
文件,我希望程序能夠從任何目錄運行,所以我不知道完整的地址的文件。在不知道C++完整路徑的情況下打開一個.exe文件
Eg-
我製作的程序將出現在一個文件夾中,該文件夾又包含子文件夾,其中還包含javaportable.exe
。我希望程序運行上面提到的.exe
而不會獲得完整的路徑。正常DOS導航中的cd操作符。另外,如果可能的話,我想選擇另一個.exe
,它將運行通過javaportable.exe
,並且存在於上一個文件夾中。
首先,標準C++庫不提供任何這樣的函數來列出目錄的文件。你可以使用boost庫來完成這件事。解決這個問題並不容易。你將不得不實施很多技術才能完成這項工作。我可以給你所有可能的出發點。
要將此代碼移植到其他操作系統,您可能需要使用#預處理器指令添加操作系統特定的代碼。 Boost Liberay已經是跨平臺的。
所有你需要取得相應目錄程序的電流通路的首先存在於:
爲此,您可以使用下面的Windows操作系統的特定代碼
#include <iostream>
#include <direct.h>
int main(){
char *path = NULL;
path = _getcwd(NULL, 0); // or _getcwd
if (path != NULL)
std::cout << path;
}
這裏的路徑變量包含當前目錄的地址。您可以將此路徑傳遞給下一個將進一步使用它來列出文件和目錄的函數。對於上市的目錄,你可以使用升壓Liberarieshttp://www.boost.org/
接下來,您將需要獲得所有文件和存在於當前目錄中的文件夾。從升壓 使用Boost庫這個
使用此示例代碼http://www.boost.org/doc/libs/1_37_0/libs/filesystem/example/simple_ls.cpp
然後使類和存儲地址收到並在其對象路徑文件名。您可以將所有列出的地址存儲在dir[1].str[size], dir[2].str[size],...
等對象中。 現在再次傳遞您收到的所有文件夾地址以提升功能並獲得更多文件名。以上所有將需要許多通行證。 您還可以得到特定的文件擴展名的文件列表太:
#define BOOST_FILESYSTEM_VERSION 3
#define BOOST_FILESYSTEM_NO_DEPRECATED
#include <boost/filesystem.hpp>
namespace fs = ::boost::filesystem;
// return the filenames of all files that have the specified extension
// in the specified directory and all subdirectories
void get_all(const fs::path& root, const string& ext, vector<fs::path>& ret)
{
if(!fs::exists(root) || !fs::is_directory(root)) return;
fs::recursive_directory_iterator it(root);
fs::recursive_directory_iterator endit;
while(it != endit)
{
if(fs::is_regular_file(*it) && it->path().extension() == ext) ret.push_back(it->path().filename());
++it;
}
}
最後比較要運行並執行它的一個文件名。
該問題也可以通過許多其他方法解決,但我認爲這將是很好的開始,你可以隨時改進你的代碼。
參考文獻:
停止使用TurboC++,即。最有可能的是1993年的軟件**,現在**。我不認爲你有DOS – deviantfan
這是我們學校所教的內容。我只有17歲! –
然後請換學校,因爲接受這個廢話(並相信它)正在傷害你。如果你是17歲或70歲或者其他什麼都沒關係。 – deviantfan