文件的间接路径,当从其他地方调用程序时
Indirect Path to Files, when program is called from somewhere else
我的 C++ 控制台程序有问题。我需要一些字典文件来进行一些翻译。所以我在程序中读取了这个文件,并给了他们一个程序文件夹的间接路径。
String="translation\PfadzuDatei\Datei.txt";
在调试模式下效果很好,因为 VS 在正确的目录中启动程序,但是当我释放它时,它会从其他地方调用,例如:
Path of Program: c:\Program.exe
我从以下位置开始:
C:\anyPathInConsole\>c:\Program.exe arg1
程序找不到翻译文件。
是否有任何其他可能以其他方式设置文件路径,或者我是否必须从 C:\
调用程序
从特定文件夹调用程序的问题是,该程序是由 nodejs "Child-Prozess" exec 函数启动的,我不知道执行路径。
我从我的nodejs-Server中找到了"Child-Process"执行程序的路径。它是项目文件夹,而不是我的 js 文件的文件夹。谢谢您的意见。我将文件复制到我的项目文件夹中。
抱歉浪费您的时间。
不知道作者用的是什么操作系统,假设是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;
}
for lixux readlink("/proc/self/exe", buf, sizeof(buf));
可以代替GetModuleFileNameA
我的 C++ 控制台程序有问题。我需要一些字典文件来进行一些翻译。所以我在程序中读取了这个文件,并给了他们一个程序文件夹的间接路径。
String="translation\PfadzuDatei\Datei.txt";
在调试模式下效果很好,因为 VS 在正确的目录中启动程序,但是当我释放它时,它会从其他地方调用,例如:
Path of Program: c:\Program.exe
我从以下位置开始:
C:\anyPathInConsole\>c:\Program.exe arg1
程序找不到翻译文件。
是否有任何其他可能以其他方式设置文件路径,或者我是否必须从 C:\
调用程序从特定文件夹调用程序的问题是,该程序是由 nodejs "Child-Prozess" exec 函数启动的,我不知道执行路径。
我从我的nodejs-Server中找到了"Child-Process"执行程序的路径。它是项目文件夹,而不是我的 js 文件的文件夹。谢谢您的意见。我将文件复制到我的项目文件夹中。 抱歉浪费您的时间。
不知道作者用的是什么操作系统,假设是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;
}
for lixux readlink("/proc/self/exe", buf, sizeof(buf));
可以代替GetModuleFileNameA