您的位置:

C++文件读写操作指南

一、文件流操作

文件流是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; } ```