我有这个简短的程序:

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

int main (int argc, char * argv[]) {
  std::string homedir = std::getenv("HOME");
  std::string filename = argc > 1 ? argv[1] : (homedir + "/" + "file");
  std::cout << homedir << std::endl;
  std::cout << filename << std::endl;
  std::fstream file;
  file.open(filename, std::ios::out);
  file << "Yo yo waddup" << std::endl;
  file.close();
  return 0;
}


当我不提供任何参数时,它将在用户的主目录中打开一个文件。那当然是有道理的。但是当我从这样的不同目录运行它时:

$ ./folder/hometest examplefile


该程序在我的当前目录而不是该程序所在的目录中创建“ examplefile”。

为什么会这样呢?

最佳答案

为什么会这样呢?


该程序的行为与预期的一样。

相对于当前工作目录而不是可执行文件所在的位置打开文件。

如果不是那样的话


您的所有程序都必须使用绝对路径,或者
程序的位置将充满文件。首先,由于权限问题,这可能无法实现。其次,在多用户系统中,用户最终将尝试创建相同的文件名/目录。


以上都不是理想的。

07-24 09:45
查看更多