Tag: ifstream新

C ++ ifstream failbit和badbit

在C ++的情况下,在什么条件下设置failbit和badbit标志?

使用string作为打开文件path的C ++ ifstream错误。

我有: string filename: ifstream file(filename); 编译器抱怨ifstream文件和string之间没有匹配。 我需要将文件名转换成什么? 这是错误: error: no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(std::string&)' /usr/include/c++/4.4/fstream:454: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]

我是否需要手动closuresifstream?

当我使用std::ifstream时,是否需要手动调用close() ? 例如,在代码中: std::string readContentsOfFile(std::string fileName) { std::ifstream file(fileName.c_str()); if (file.good()) { std::stringstream buffer; buffer << file.rdbuf(); file.close(); return buffer.str(); } throw std::runtime_exception("file not found"); } 我需要手动调用file.close()吗? 不应该使用RAII来closures文件吗?

从ifstream读取一行到一个stringvariables

在下面的代码中: #include <iostream> #include <fstream> #include <string> using namespace std; int main() { string x = "This is C++."; ofstream of("d:/tester.txt"); of << x; of.close(); ifstream read("d:/tester.txt"); read >> x; cout << x << endl ; } Output : This 由于>>运算符读取第一个空白我得到这个输出。 我怎样才能提取行回到string? 我知道这种forms的istream& getline (char* s, streamsize n ); 但我想存储在一个stringvariables。 我怎样才能做到这一点?

tellg()函数给出错误的文件大小?

我做了一个示例项目,将文件读入缓冲区。 当我使用tellg()函数时,它给了我一个比读取函数实际从文件中读取的值更大的值。 我认为有一个错误。 这里是我的代码: 编辑: void read_file (const char* name, int *size , char*& buffer) { ifstream file; file.open(name,ios::in|ios::binary); *size = 0; if (file.is_open()) { // get length of file file.seekg(0,std::ios_base::end); int length = *size = file.tellg(); file.seekg(0,std::ios_base::beg); // allocate buffer in size of file buffer = new char[length]; // read file.read(buffer,length); cout << file.gcount() […]

ifstream的eof()如何工作?

#include <iostream> #include <fstream> int main() { std::fstream inf( "ex.txt", std::ios::in ); while( !inf.eof() ) { std::cout << inf.get() << "\n"; } inf.close(); inf.clear(); inf.open( "ex.txt", std::ios::in ); char c; while( inf >> c ) { std::cout << c << "\n"; } return 0; } 我真的很困惑eof()函数。 假设我的ex.txt的内容是: abc 它总是读取一个额外的字符,并使用eof()读取时显示-1 。 但inf >> c给出了正确的输出是'abc'? 任何人都可以帮我解释一下吗?

在c ++中快速读取文本文件

我目前正在用c ++编写一个程序,其中包括阅读大量的大文本文件。 每行至less有400,000行,极端情况下每行有4000或更多字符。 为了testing,我使用ifstream和cplusplus.com提供的实现来阅读其中的一个文件。 花了大约60秒,这太长了。 现在我想知道,是否有一个简单的方法来提高阅读速度? 编辑:我使用的代码是或多或less这个: string tmpString; ifstream txtFile(path); if(txtFile.is_open()) { while(txtFile.good()) { m_numLines++; getline(txtFile, tmpString); } txtFile.close(); } 编辑2:我读的文件只有82 MB大。 我主要说可能达到4000,因为我觉得可能有必要知道为了做缓冲。 编辑3:谢谢大家的回答,但看起来好像没有太大的空间来改善我的问题。 我不得不使用readline,因为我想要计算行数。 将ifstream实例化为二进制不会使读取速度更快。 我会尽可能地并行化,至less应该起作用。 编辑4:所以显然有一些事情我可以。 非常感谢你把这么多的时间放在这里,我很感激! =)

获取std :: ifstream来处理LF,CR和CRLF?

具体来说,我对istream& getline ( istream& is, string& str );感兴趣istream& getline ( istream& is, string& str ); 。 是否有ifstream构造函数的选项来告诉它将所有换行符编码转换为“\ n”? 我希望能够调用getline ,并优雅地处理所有的行结束。 更新 :为了澄清,我希望能够编写几乎在任何地方编译的代码,并将从几乎任何地方接受input。 包括具有“\ r”但不包含“\ n”的罕见文件。 最大限度地减less软件用户的不便。 解决这个问题很容易,但是我仍然对标准中的正确方式感到好奇,以灵活地处理所有文本文件格式。 getline将整行读入一个'\ n',并转换成一个string。 '\ n'从stream中消耗,但getline不包含在string中。 到目前为止,这很好,但是在\ n之前可能会有一个'\ r'被包含到string中。 在文本文件中有三种types的结尾符号 :'\ n'是Unix机器上的传统结尾,''r'是我以前在Mac操作系统上使用的,Windows使用'\ r'接着'\ n'。 问题在于getline在string的末尾留下'\ r'。 ifstream f("a_text_file_of_unknown_origin"); string line; getline(f, line); if(!f.fail()) { // a non-empty line was read […]