在运行时找出文件的路径
finding out the path to a file at runtime
在一个程序中,我在运行时打开一个文件,比如file.dat
。问题是当我运行可执行文件时,它希望文件位于执行它的目录中。我希望程序查看存在可执行文件的同一目录。我应该在我的程序(或构建系统)中进行哪些修改。
例如,考虑以下程序:
int main()
{
std::ifstream ip("file.dat");
// do something.
return 0;
}
我正在使用 g++-4.6 编译器和 CMake 构建系统在 Ubuntu 上工作。由于该项目支持源代码外构建,这意味着程序可执行文件可以在任何地方,具体取决于从中调用cmake
的目录。
感谢您的帮助...
在许多系统上,argv[0]
参数将具有用于执行程序的路径。这是否是程序的完整路径取决于它的调用方式。
int main (int argc, char *argv[]) {
std::string progname(argv[0]);
std::string datafile;
if (progname.find_last_of('/') != std::string::npos)
datafile = progname.substr(0, progname.find_last_of('/')+1);
datafile += "file.dat";
std::ifstream ip(datafile.c_str());
//...
}
在 Linux 上,阅读/proc/self/exe 是最好的方法。
char app_path[1024];
ssize_t len = ::readlink("/proc/self/exe", app_path, sizeof(app_path)-1);
if (len != -1) {
app_path[len] = ' ';
} else {
// handle error
}
有关其他操作系统,请参阅:https://stackoverflow.com/a/1024937/105015
相关文章:
- 如何将更多文件夹添加到c++include路径
- 从函数角度看ID到文件路径的内部与外部映射
- 在C++中设置基于操作系统的文件路径
- C++17 文件系统::remove_all 带有通配符路径
- 从 C 中的变量获取文件的路径,C++
- 将共享库的搜索路径更改为生成文件中提供的 rpath
- 修改生成文件以简化框架 #include 路径
- 将Visual Studio Code路径设置为.clang_format文件
- Windows 非 ASCII 文件路径
- 非 ASCII 文件路径窗口
- C++和带有国家符号的文件路径(也许用 UTF8 编码)
- 获取 H5::D ataSet 的hid_t和文件中的路径以使用 H5OCopy
- 在特定 Unicode 路径中创建文件
- 如何让用户在 tinyxml2 中输入 XML 文件的路径
- 如何将COM .tlb文件导入具有相对路径C++文件中?
- C++ 路径文件存在限制为 260 个字符
- QT-在pro中指定DLL路径.文件
- 路径文件存在导致链接器错误 2028/2019
- 选择QTableWidgetItem qt的路径文件
- 如何有一个正确的路径文件读取它到stringstream