01功能之读写文件流操作
前言:
1)下面我们将讲如何将文件的内容使用C++方法读写文件。
为了以后重用方便。
2)文件最大一行字节是=1024。
1 读取文件全部1,可读取空格和换行符,但换行符读进buf时被自动转成’\0’。
string ReadFile1(string fileName) {
/*
open():
参2代表打开方式:1)ios::in文件以输入打开;2)ios::out文件以输出到磁盘打开;还有其它方式等等。
参3代表操作权限:0-普通文件打开访问 1-只读 2-隐含文件 3-系统文件。
*/
char buf[1024]; // 文本文件每行最大读取的字节数=1024
string totalStr;
memset(buf, 0, 1024);
// 关联文件
ifstream inFile;
inFile.open(fileName);
//inFile.open(fileName, ios::in | ios::app ); // 只给in方式打开失败了
if (inFile.is_open() == false) {
cout << "文件打开失败" << endl;
return "";
//return "";
}
// 读取文件
while (inFile.eof() != true) { // eof()代表是否读到文件末尾
inFile.getline(buf, 1024); // 可以读空格
//fileIn.read(buf, sizeof(buf)); // 可以读空格
UTF8ToGB(buf);
cout << buf << endl;
//cout << strlen(buf) << endl; // 这里测试到buf读出来的\n被自动转成了'\0'(记住就好)
totalStr.append(buf);
}
inFile.close();
return totalStr;
}
2 读取文件全部,可读取空格和换行符,但换行符读进buf时被自动转成’\0’。注:两个getline()是不一样的,但用法差不多。
// 读取文件全部2 也可读取空格和换行符 但换行符被转成'\0'
void ReadFile2(string fileName)
{
ifstream inFile;
inFile.open(fileName);
//infile.open(file, ios::in | ios::app);
assert(inFile.is_open());
string s;
while (getline(inFile, s)){ // 返回输入流 只要流是正常返回就可以读取 否则说明读完
UTF8ToGB(s.c_str());
cout << s << endl;
}
inFile.close();
}
3 将字符串写入文件
这里我用的是输入流的做法,你也可以自己尝试用C++提供的Write相关函数。
// 将字符串写入文件
void WriteFile(string fileName,string s1) {
//ofstream outFile(fileName,ios::ate); //写入方式为覆盖
ofstream outFile(fileName, ios::app); //写入方式为追加数据
if (!outFile) {
throw exception("打开文件失败");
}
outFile << s1;
outFile.close();
}