为什么这不打开程序目录中的文件?
Why doesn't this open the file in the directory of the program?
我有这个简短的程序:
#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
该程序在我的当前目录中创建"示例文件",而不是程序所在的目录。
究竟为什么会这样?
为什么会这样?
程序的行为与预期一致。
文件是相对于当前工作目录打开的,而不是相对于可执行文件所在的位置打开的。
如果它不是那样工作的,
- 您的所有程序都必须使用绝对路径,或者
- 程序的位置将被文件淹没。首先,由于权限问题,这可能无法实现。其次,在多用户系统中,用户最终将尝试创建相同的文件名/目录。
以上两者都不可取。
相关文章:
- 将 glade 文件与程序 g++ 链接
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 编译简单的多文件类程序时出现未定义的引用错误
- 除了系统("pause")之外,是否有其他选项可以保持可执行文件打开?
- 为什么这不打开程序目录中的文件?
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- C++对象文件和程序文件组合编译的 Bashrc 别名
- 如何让 c++ 程序执行以响应文件打开
- C++ 使用 json 文件提升程序选项
- 多线程文件 IO 程序在线程数增加时行为不可预测
- Qt4文件打开错误:没有这样的文件或目录
- 如何在与 c++ 代码不同的终端中打开程序?
- Qt应用程序在使用文件打开对话框后将焦点切换到其他应用程序
- 试图打开.txt文件时程序崩溃
- 如何打开程序与其文件扩展名关联的文件
- ifstream 文件打开导致程序'terminate in an unusual way'
- 程序如何在重新打开程序后创建文件并知道文件的路径(由用户随机指定)?
- 如何在windows中以编程方式关闭打开的文件/应用程序
- C++-将文件处理程序传递到函数中以打开时出错