C++ fstream open
C++ fstream open
我能够创建文件,例如
f.open("file")
f.open("./path/file")
f.open("../path/file")
但不是
f.open("~/path...)
f.open("/path...)
如何获得绝对路径的工作?
默认情况下,std::fstream::open(filename)
打开输入和输出的filename
。因此,该文件必须存在,并且您必须具有写入权限。
在您的情况下:
f.open("file")
f.open("./path/file")
f.open("../path/file")
你很幸运。
在您的情况下:
f.open("~/path...")
您使用了路径元素~
,这意味着$HOME
在外壳中,但只是表示~
C++。
在这种情况下:
f.open("/path...")
你很不幸:要么文件不存在,要么你没有写入权限。
如果您只想打开文件进行输入,则:
- 使用
std::ifstream
- 使用
std::fstream f; f.open(filename,std::ios_base::in);
如果您只想打开文件进行输出,则:
- 使用
std::ofstream
- 使用
std::fstream f; f.open(filename,std::ios_base::out);
有了f.open("~/path/....")
,你有必要在代码中展开~
。 这通常是通过调用 getenv("HOME")
来检索主目录,并将路径中出现的每个'~'
替换为主目录来完成的。
使用绝对路径(如 "/path/whatever"
)时,您需要检查f.open()
是否成功。 f.open()
可能失败的原因有多种,包括访问控制(阻止打开文件的保护措施)、文件已被另一个进程打开、目录不存在等。
值得注意的是,f.open()
在尝试打开目录中的文件时,要求路径中的所有目录都已存在。 它不会施展一些魔法来使它们存在。 如果你想要它,你需要编码它。 请记住,每个阶段(创建目录等)都可能失败。
相关文章:
- 在fstream期间忽略空行
- 使用fstream对txt文件中的数字进行循环
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 使 std::fstream 写入文件末尾,但从头开始读取
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 自定义 std::fstream,std::filebuf 的溢出和下溢函数未为每个字符调用
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 为什么 fstream.open(文件名) 适用于文字而不是生成的字符串?
- Increment a variable string & Multi fstream open c++
- 使用ofstream或fstream-open不会出错,也不会打开文件
- C++ fstream open
- 为什么 fstream::open() 需要一个 C 样式的字符串
- fstream::open() Unicode 或非 ASCII 字符在 Windows 上不起作用(使用 std::ios::out)
- 如果fstream.open()在子函数中失败,如何退出程序
- fstream.open()设置故障位
- c++ fstream -如何在.open()中添加变量而不是字符串
- 使用NDK, std::fstream open()失败,而fopen()正常工作,为什么?