无法在c ++中完全读取文件?

时间:2014-01-02 08:54:32

标签: c++ file

我有以下代码从文件中读取
我在http://m.uploadedit.com/b026/13886560748.txt中上传了该文件 文件中字符串的大小大于113但低于代码打印113
?为什么?!

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <bitset>
#include <stdlib.h>
using namespace std;

int main()
{
    ifstream inf("Sample.txt");

    string str;
    string file_contents ="";
    while ( getline(inf, str ) )
    {
        file_contents += str;
        file_contents.push_back('\n');
    }
    cout << file_contents.size() << endl; // print 113

    return 0;
}

UPDATE 1
因此,通过在二进制模式下打开文件问题将得到解决。
ifstream inf("Sample.txt");更改为ifstream inf("Sample.txt",ios::binary);

2 个答案:

答案 0 :(得分:3)

您逐行将它们与'\n'连接在一起,但在您的环境中可能会有二进制到文本的翻译:在文本文件中某些操作系统代表CR的“新行” / LF(windows)或LF / CR(mac os)序列,而不仅仅是LF(linux)。

这导致文件的长度超过实际读取的时间。

答案 1 :(得分:2)

如果你想一点一点地读它,这不是最好的方法。

您可能想尝试使用ifstream read

#include <iostream>
#include <string>
#include <fstream>
#include <ios>
using namespace std;

//takes char to write byte to, and the current stream
//returns true if successfully read, else return false (aka. no more bytes to read)
bool readChar(unsigned char &r,ifstream &data){
    if(data.read((char*)&r,sizeof(unsigned char))){
        return true;
    }
    return false;
}

int main(){
    ifstream sampleStream("Sample.txt",ios::binary|ios::in);
    unsigned char tmp;

    int byteCount = 0;

    while (readChar(tmp,sampleStream))
    {
        byteCount++;
        //If you'd like to read bits, use some bit masking here over tmp
        //and iterate over bits
    }

    cout<<byteCount<<endl; // yields 6715
}

Reference