在c++中执行getline函数调用时,何时设置failbit ?
when would failbit be set while executing a getline function call in c++
c++中的getline何时会失败?
我有一段很大的代码片段,由于各种原因,我无法将其全部粘贴。我试图从一个文件中读取,我知道存在并包含数据,使用c++中的getline。但是getline失败,返回错误123-无效名称(getlasterror的输出)。我查了一下更让我困惑的错误代码。
我在打开文件时做错误检查。所以我确信我有文件的句柄。请原谅我没有粘贴代码。我是c++的新手,尤其是windows。任何关于getline的建议或见解都会有所帮助。我正在尝试读取一个由编译器转储的文件。
这是代码
的摘录ifstream inFile("C:...ash.txt",ios::in);
string singleLine;
getline(inFile,singleLine);
singleLine为空!我在做蠢事,请指出来!很感激
重要的编辑:
我检查了ios成员,发现设置了失败位。为什么要设置失效位?该文件确实存在,而且我想知道windows如何暴露文件扩展名可能会导致问题。那似乎不是问题。我错过了什么?
GetLastError
只告诉你Win32 API调用,std::getline
没有。
检查失败的iostream成员,如rdstate()
。
在getline
之前调用ios::exceptions(eofbit | failbit | badbit)
并捕获所产生的异常可能会也可能不会得到一个更具描述性的错误消息。
如果设置了fail
位,可能是因为您没有成功打开文件。检查ifFile.is_open()
是否返回true;如果不是,那么可能表明文件没有正确打开。您可能没有权限,或者您可能需要正确转义字符串,或者文件可能被锁定。
您还应该检查fail
是否在调用getline
之前和之后都设置了。如果是之前,那可能意味着文件没有打开。如果是after,则可能表示文件为空。
可能是Windows对您隐藏了真正的文件扩展名。例如,如果将资源管理器配置为隐藏文件扩展名,则文件名实际上可能命名为ash.txt.txt
。如果文件没有打开,这可能值得调查。
是否需要转义文件路径中的反斜杠?
打开文件失败。
这是因为您没有指定正确的路径。
这是因为您使用了古老的windows约定作为路径分隔符。
这恰好也是c中的转义字符
这就是为什么Windows允许您使用/作为路径分隔符(并且已经使用了十多年),因为使用'/'是如此容易出错。
你的路径应该是:
ifstream inFile("C:\...\ash.txt");
// Or my preference
ifstream inFile("C:/.../ash.txt");
或者更好的使用boost
Getline IIRC用于c_string,该字符串是第一个参数,而不是第二个参数。
http://www.cplusplus.com/reference/iostream/istream/getline/你试图使用一个正常的字符串,这(我可能是错的)不工作与getline.
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 何时在引用或唯一指针上使用移动语义
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 何时提供默认参数作为模板参数
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- C++-明确何时以及如何调用析构函数
- Win32 中是否有一条消息或通知来检测用户何时更改区域设置?
- 唯一_ptr何时在此设置器上重置
- 虚拟函数表何时设置为0
- 问题:何时使用继承与设置属性
- 在c++中执行getline函数调用时,何时设置failbit ?