在C++中,一般喜欢用输入输出流来进行文件操作。但在用fstream操作的时候,读到一个空格后,就会停止。有什么办法能完整地读入整个文件而不抛弃空格、换行符?即保留原有的格式……

有两种方法可以实现在C++里完整地读入整个文件。

第一种方法示例代码:

string str,strTotal;
ifstream in;
in.open(“myfile.txt”);
getline(in,str);
while ( in ) {
strTotal += str;
getline(in,str);
}

第二种方法,用binary的方式读写整个文件
示例代码1:

std::ifstream file1(“in.txt”, ios::in | ios::binary);
std::ofstream file2(“out.txt”, ios::out | ios::binary);

char input;
while(file1.read(&input, 1))
{
file2.write(&input, 1);
}

file1.close();
file2.close();

示例代码2:

// reading a complete binary file
#include
#include
using namespace std;

ifstream::pos_type size;
char * memblock;

int main () {
ifstream file (“example.bin”, ios::in|ios::binary|ios::ate);
ofstream OutTest(“test.zip”,ios::out|ios::binary);//just for local test

if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
OutTest.write(memblock,size);//write to local folder for check if the data read correctly.

file.close();
OutTest.close();

cout « “the complete file content is in memory”;

delete[] memblock;
}
else cout « “Unable to open file”;
return 0;
}

对于一般的文本操作来说,用binary的方法来读文件没啥用。但是在类似于socket传输文件之类的情形下,就非常地有必要了。这时,可以一次性简单明了的读入文件,再用来传输。