如何检查文件未打开的原因
How to check why file is not opened?
std::ifstream fin;
fin.open("file.txt", std::ios::in);
std::cout << fin.is_open();
此代码打印false
,因此不会打开文件。如何检查为什么。也许从对象fin
收到错误消息?我猜原因是文件已经打开进行写入。但我想打开它阅读。是否可以打开文件进行读取和写入。?
我正在使用Linux。有了strerror(errno)
我得到错误没有这样的文件或目录,但我的文件存在。也许错误是因为它已经使用其他对象打开了?它已经使用 C API 打开,因此fin
无法打开它。如何打开已经打开的文件?
该标准指定存在预处理器符号 errno
,它扩展到引用 (线程( 的内容local( int
,其中系统函数应放置扩展错误代码。 它还定义了一个函数strerror
,允许使用短信恢复char const*
,给定这个数字(但与errno
不同,该函数不是保证是线程安全的(。
该标准对filebuf
使用errno
,至少不是在open
的情况下,而是在实践,filebuf
将调用较低级别的函数,这些函数将(希望(使用errno
. (这是Posix所要求的,其中所有的系统调用设置errno
,以防出错。 我不太确定关于视窗。
至于双向访问:这可能是一个坏主意,但是...... filebuf
总是潜在的双向的,但ifstream
不会定义任何<<
运算符,ofstream
也不会定义任何 >>
运算符,因此您可能希望使用 std::fstream
. 如果你想要能够搜索,您还需要在二进制模式;否则,你只能寻找你去过的地方到之前,并记住了位置。 如果你想阅读什么你刚刚写过,更好的解决方案是关闭输出,然后打开它进行阅读。
回答 Q#1:errno
并且GetLastError()
保存最后一个错误信息。要获取错误的字符串消息,请使用:strerrno(errno)
。
答案 Q#2:要为读/写打开它,您需要使用 fstream
(不是 ostream
或 istream
(类并将打开模式设置为 std::ios::in | std::ios::out
。
是的。 您应该使用 fstream 而不是 ifstream 或 ofstream。 请参考以下链接:http://www.cplusplus.com/doc/tutorial/files/
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何检查文件是否已存在于 fstream C++中
- CocoaPod - 在头文件中使用 C++ 时出现 Podspec 检查错误
- 如何使用 ifstream 检查文件中变量的类型?
- 如何在SWIG接口文件中检查Lua版本
- 如何使用C 在.TEXT文件中检查字符序列
- WINAPI:文件存在检查失败
- 通过ReadFile()函数阅读文件时检查文件末端
- 如何在使用ifstream读取txt文件时检查EOF
- 在C++中,如何在使用gzstream编写压缩文件时检查错误
- 从FTP自动下载文件并检查现有文件
- C++逐行读取文件并检查它是否等于特定字符串
- 如何在创建新文件之前检查文件是否存在
- 创建文件,检查是否存在同名的文件
- c++文件提取检查是否为int
- 文件结束检查不起作用 (C++)
- 写文件时检查错误
- 如何在特定文件中检查(控制).avi格式的视频文件,它是否超过0KB且可读