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

时间:2018-12-11 12:41:37

标签: c++ execution

我的C ++控制台程序有问题。我需要一些词典文件来进行某些翻译。因此,我在程序中读取了这些文件,并给了它们一个指向程序文件夹的间接路径。

String="translation\\PfadzuDatei\\Datei.txt";

在Debugging-Mode(调试模式)下,此方法非常有用,因为VS在正确的目录中启动该程序,但是当我释放它时,会从其他地方调用它,例如:

Path of Program: c:\Program.exe

我从另一个位置开始:

C:\anyPathInConsole\>c:\Program.exe arg1

程序无法找到翻译文件。

是否还有其他可能性以其他方式设置文件的路径,还是必须从C:\

调用程序?

从特定文件夹调用程序的问题是,该程序是由nodejs“ Child-Prozess” exec函数启动的,我不知道执行路径。

2 个答案:

答案 0 :(得分:0)

我找到了来自我的nodejs-Server的“子进程”执行程序的路径。它是项目文件夹,而不是我的js文件的文件夹。谢谢您的意见。我将文件复制到我的项目文件夹中。 抱歉浪费您的时间。

答案 1 :(得分:0)

我不知道作者使用什么操作系统,我将假定使用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