在 C++ 中,标准库提供了一组文件操作的函数和类,可以用来处理文件的读取、写入、打开、关闭等操作。主要使用的库是 <fstream>
和 <cstdio>
。以下是详细的举例说明:
1. 使用 <fstream>
<fstream>
提供了三个主要的类用于文件操作:
std::ifstream
:用于文件读取。std::ofstream
:用于文件写入。std::fstream
:用于文件的读取和写入。
1.1 读取文件 (std::ifstream
)
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream inputFile("example.txt"); // 打开文件用于读取
if (!inputFile) {
std::cerr << "Unable to open file for reading.\n";
return 1;
}
std::string line;
while (std::getline(inputFile, line)) { // 逐行读取文件内容
std::cout << line << std::endl;
}
inputFile.close(); // 关闭文件
return 0;
}
1.2 写入文件 (std::ofstream
)
#include <iostream>
#include <fstream>
int main() {
std::ofstream outputFile("example.txt"); // 打开文件用于写入
if (!outputFile) {
std::cerr << "Unable to open file for writing.\n";
return 1;
}
outputFile << "Hello, world!" << std::endl; // 写入内容到文件
outputFile.close(); // 关闭文件
return 0;
}
1.3 读写文件 (std::fstream
)
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::trunc); // 打开文件用于读写
if (!file) {
std::cerr << "Unable to open file for reading and writing.\n";
return 1;
}
file << "Writing to file\n"; // 写入内容到文件
file.seekg(0); // 移动读取位置到文件开始
std::string line;
while (std::getline(file, line)) { // 逐行读取文件内容
std::cout << line << std::endl;
}
file.close(); // 关闭文件
return 0;
}
2. 使用 <cstdio>
<cstdio>
提供了 C 风格的文件操作函数,如 fopen
, fclose
, fread
, fwrite
, fprintf
, fscanf
等。
2.1 读取文件 (fread
)
#include <cstdio>
int main() {
FILE* file = std::fopen("example.txt", "r"); // 打开文件用于读取
if (!file) {
std::perror("Unable to open file for reading");
return 1;
}
char buffer[256];
while (std::fgets(buffer, sizeof(buffer), file)) { // 逐行读取文件内容
std::printf("%s", buffer);
}
std::fclose(file); // 关闭文件
return 0;
}
2.2 写入文件 (fprintf
)
#include <cstdio>
int main() {
FILE* file = std::fopen("example.txt", "w"); // 打开文件用于写入
if (!file) {
std::perror("Unable to open file for writing");
return 1;
}
std::fprintf(file, "Hello, world!\n"); // 写入内容到文件
std::fclose(file); // 关闭文件
return 0;
}
2.3 读写文件 (fopen
with "r+" mode)
#include <cstdio>
int main() {
FILE* file = std::fopen("example.txt", "r+"); // 打开文件用于读写
if (!file) {
std::perror("Unable to open file for reading and writing");
return 1;
}
std::fprintf(file, "Writing to file\n"); // 写入内容到文件
std::rewind(file); // 移动文件指针到文件开始
char buffer[256];
while (std::fgets(buffer, sizeof(buffer), file)) { // 逐行读取文件内容
std::printf("%s", buffer);
}
std::fclose(file); // 关闭文件
return 0;
}
总结
std::ifstream
:用于从文件中读取数据。std::ofstream
:用于将数据写入文件。std::fstream
:同时支持读取和写入操作。<cstdio>
:提供了 C 风格的文件操作函数,如fopen
,fclose
,fread
,fwrite
,fprintf
,fscanf
等。
根据需要选择适合的函数或类来进行文件操作,通常建议使用 C++ 的流库(<fstream>
)来处理文件,因为它提供了更高层次的抽象和更好的类型安全。