文本文件

写文件

#include<fstream>头文件

创建流对象
ofstream ofs;写
fstream fs;读写

ofs.open();打开文件
ofs("abc.txt",ios::out)
ofs("abc.txt",ios::out|ios::ate)(这里复用)
如果没有abc文件,则创建

ofs<<"...";写入文件
ofs.close();关闭文件
ios::in 为读文件而打开文件
ios::out 写文件(覆盖)
ios::ate 在文章尾写文件
ios::app 追加方式写文集
ios::trunc 删除文件再创建
ios::binary 二进制方式

读文件

#include<fstream>头文件

创建流对象
ifstream ifs;读

ifs.open("abc.txt",ios::in);如上
if(ifs.is_open())接着判断,如果有则返回1
{
ifs>>...输入流>>,输出流<<
}
while( (c=ifs.get())!=EOF)
{

}表示读到结尾结束
ifs.close();

相关函数操作

ifs.seekg(36*(a-1),ios_base::beg);用于写操作
ofs.seekp(36*(a-1),ios_base::beg);用于读取操作
用于移动文件指针到36(a-1)的位置,即跳过36*(a-1)个元素在进行输入。
getline(ifs,str,'\n');
读取一行,直到遇到换行符(\n)。输入的对象必须是string类型,即例子中的str。可以指定停止读取的位置,默认为'\n'
ios_base::beg:从文件开始处计算指针位置
ios_base::cur:从当前位置计算指针位置
ios_base::end:从文件末尾计算指针位置
ifs.tellg();获取文件指针位置
ifs.peek();查看文件指针位置
ifs.eof();判断文件是否结束
ifs.clear();清空错误

读/写文件问题

如果出现无法读取文件:

  1. 确保文件存在
  2. 确保文件名正确(可以替换成绝对路径,如c++/实训/文件/solve.txt)
  3. 确保文件权限足够(一般用不到)
  4. 确保文件编码正确(一般用不到)

对文件定点删除插入

char buffer[1024];
while (inFile.read(buffer, sizeof(buffer))) {
outFile.write(buffer, inFile.gcount());
}buffer为缓冲区,sizeof(buffer)为缓冲区大小
删除原文件并将临时文件重命名为原文件名
std::remove("example.txt");删
std::rename("temp.txt", "example.txt");覆盖

注意:这个示例假设文件中至少有10个字节。在实际使用时,请确保文件大小足够,以避免越界访问。