一、文件流操作
文件流是C++标准库提供的最基本的文件读写方式,可以通过fstream库的ifstream和ofstream两个类进行文件的读写操作。其中,ifstream用于读取文件内容,而ofstream则用于向文件中写入内容。
打开文件:
在使用文件流进行操作之前,需要先打开文件。可以使用open()函数打开文件,该函数包含两个参数——文件名和文件打开方式。文件打开方式有多种,如:
– ios::in 表示以读取方式打开文件
– ios::out 表示以写入方式打开文件
– ios::app 表示打开文件并定位到文件末尾,用于追加内容
– ios::trunc 如果文件存在,则清空文件内容
– ios::ate 打开文件并将文件定位到文件末尾
示例代码:
“`cpp
#include
#include
using namespace std;
int main() {
// 创建一个文件输出流,以写入方式打开文件
ofstream outFile(“example.txt”, ios::out);
// 写入数据到文件
if (outFile.is_open()) {
outFile << "hello, world\n" << "this is a file.\n";
outFile.close();
} else {
cout << "Unable to open file for writing!\n";
}
// 创建一个文件输入流,以读取方式打开文件
ifstream inFile("example.txt", ios::in);
// 读取文件内容
if (inFile.is_open()) {
string line;
while(getline(inFile, line)) {
cout << line << endl;
}
inFile.close();
} else {
cout << "Unable to open file for reading!\n";
}
return 0;
}
“`
二、字符流操作
字符流操作是在文件读写时以字符为单位进行的操作,可以使用fgetc()和fputc()函数对文件进行读写操作。其中fgetc()用于读取一个字符,返回值为字符对应的整型值,如果到达文件末尾则返回EOF。而fputc()用于将一个字符写入文件中。
示例代码:
“`cpp
#include
int main() {
// 打开文件
FILE* fp = fopen(“example.txt”, “w”);
// 写入数据到文件
if (fp != NULL) {
fputc(‘h’, fp);
fputc(‘e’, fp);
fputc(‘l’, fp);
fputc(‘l’, fp);
fputc(‘o’, fp);
fclose(fp);
} else {
printf(“Unable to open file for writing!\n”);
}
// 重新打开文件
fp = fopen(“example.txt”, “r”);
// 读取文件内容
if (fp != NULL) {
int ch;
while((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
fclose(fp);
} else {
printf(“Unable to open file for reading!\n”);
}
return 0;
}
“`
三、字符串流操作
字符串流操作是将字符串当做流进行操作,可以使用stringstream类实现。可以通过类似cin和cout的方式进行字符串的读写操作,方便快捷。
示例代码:
“`cpp
#include
#include
#include
using namespace std;
int main() {
// 写入数据到字符串
stringstream ss;
ss << "hello, world" << endl;
ss << "this is a string." << endl;
string str = ss.str();
// 输出字符串内容
cout << str;
// 读取字符串内容
stringstream ss2(str);
string line;
while(getline(ss2, line)) {
cout << line << endl;
}
return 0;
}
“`
四、文件输入输出错误和异常处理
在进行文件读写操作时,可能会遇到文件输入输出错误和异常情况,需要加以处理。其中常见的错误和异常包括:
– 文件读取失败
– 文件写入失败
– 文件不存在
可以通过对文件的状态进行判断来处理这些错误和异常情况。
示例代码:
“`cpp
#include
#include
using namespace std;
int main() {
// 打开文件
ifstream inFile(“example.txt”, ios::in);
// 判断文件是否打开成功
if (!inFile.is_open()) {
cout << "Unable to open file for reading!\n";
} else {
// 读取文件内容
string line;
while(getline(inFile, line)) {
cout << line << endl;
}
inFile.close();
}
// 写入文件
ofstream outFile("example.txt", ios::out | ios::app);
// 判断文件是否打开成功
if (!outFile.is_open()) {
cout << "Unable to open file for writing!\n";
} else {
// 写入数据到文件
outFile << "This is a new line.\n";
outFile.close();
}
// 打开不存在的文件
ifstream inFile2("nonexistent.txt", ios::in);
// 判断文件是否存在
if (!inFile2.is_open()) {
cout << "File does not exist!\n";
} else {
// 读取文件内容
string line;
while(getline(inFile2, line)) {
cout << line << endl;
}
inFile2.close();
}
return 0;
}
“`
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/184800.html