文件的间接路径,当从其他地方调用程序时
Posted
技术标签:
【中文标题】文件的间接路径,当从其他地方调用程序时【英文标题】:Indirect Path to Files, when program is called from somewhere else 【发布时间】:2018-12-11 12:41:36 【问题描述】:我的 C++ 控制台程序有问题。我需要一些字典文件来进行一些翻译。所以我在程序中读取了这个文件,并给了它们一个程序文件夹的间接路径。
String="translation\\PfadzuDatei\\Datei.txt";
在调试模式下这很好用,因为 VS 在正确的目录中启动程序,但是当我释放它时,它会从其他地方调用,例如:
Path of Program: c:\Program.exe
我从另一个位置开始:
C:\anyPathInConsole\>c:\Program.exe arg1
程序找不到翻译文件。
是否有任何其他可能以其他方式设置文件的路径,或者我必须从 C:\
调用程序从特定文件夹调用程序的问题是,程序是由 nodejs "Child-Prozess" exec 函数启动的,我不知道执行路径。
【问题讨论】:
我建议使用字典路径设置一个环境变量。 您可能想要获取 path to executable 并将您的相对路径附加到该路径 - 当然,只要 exe 和数据库保持彼此的相对位置即可...跨度> 您可以指定一个完整的路径而不是相对路径。或者将路径作为程序启动参数传递。 @DmytroDadyka 完整路径的缺点是不能放在任意位置... @Aconcagua 这取决于作者的目的。也许这个文件总是在一个严格定义的地方 【参考方案1】:我不知道作者使用的是什么操作系统,我假设是windows。您可以通过连接 *.exe 的路径和相对文件路径来获取文件的绝对路径:
std::string getPath()
char buf[256];
// Get file name
GetModuleFileNameA(nullptr, &buf[0], sizeof(buf));
// Extract path from full name
std::string path = buf;
const size_t last_slash_idx = path.rfind('\\');
if (std::string::npos != last_slash_idx)
path = path.substr(0, last_slash_idx);
// Add relative path
path += "\\";
path += "translation\\PfadzuDatei\\Datei.txt";
return path;
对于 lixux,可以使用 readlink("/proc/self/exe", buf, sizeof(buf));
代替 GetModuleFileNameA
【讨论】:
【参考方案2】:我从我的 nodejs-Server 中找到了“子进程”执行程序的路径。这是项目文件夹,而不是我的 js 文件的文件夹。谢谢您的意见。我将文件复制到我的项目文件夹中。 很抱歉浪费了您的时间。
【讨论】:
以上是关于文件的间接路径,当从其他地方调用程序时的主要内容,如果未能解决你的问题,请参考以下文章