我有以下代码从文件中读取
我在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);
答案 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
}