文件的间接路径,当从其他地方调用程序时

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 文件的文件夹。谢谢您的意见。我将文件复制到我的项目文件夹中。 很抱歉浪费了您的时间。

【讨论】:

以上是关于文件的间接路径,当从其他地方调用程序时的主要内容,如果未能解决你的问题,请参考以下文章

Python调用外部程序问题?

在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现

Linux 间接引用 .so 的路径问题

当从其他操作调用操作时,@Check 不起作用

bash中的间接变量赋值

当从 UIActivityViewController 调用时,WhatsApp 在选择收件人后冻结