目录
文件类型
文本文件,文件以ASCII码形式存储在计算机中
二进制文件,文件以文本二进制形式存储在计算机中,用户无法读懂
操作文件的类
ofstream:写操作
ifstream:读操作
fstream:读写操作
文本读写
文件打开方式
ios::in:以读方式打开文件
ios::out:以写方式打开文件
ios::ate:文件打开后,文件指针定位到末尾,可读写(不截断文件)
ios::app:追加方式写文件
ios::trunc:如果文件存在先删除再创建,也就是覆写
ios::binary:二进制方式
读模式下如果文件不存在,会报错。写模式下如果文件不存在,会创建。
读文件
cpp
#include<iostream>
#include<string>
#include<fstream>//读写文件的头文件
int main()
{
std::ifstream ifs;//输入文件流对象
ifs.open("test.txt",std::ios::in);
if(!ifs.is_open())
{
std::cout<<"文件打开失败!"<<std::endl;
return -1;
}
//第一种方式读
// char buf[1024]={0};
// while(ifs>>buf)
// {
// std::cout<<buf<<std::endl;
// }
//第二种方式读
// char buf[1024]={0};
// while(ifs.getline(buf,sizeof(buf)))
// {
// std::cout<<buf<<std::endl;
// }
//第三种方式读
// std::string buf;
// while(std::getline(ifs,buf))
// {
// std::cout<<buf<<std::endl;
// }
//第四种方式读
// char c;
// while((c=ifs.get())!=EOF)
// {
// std::cout<<c;
// }
ifs.close();
//二进制方式读
// ifs.open("test.txt", std::ios::in | std::ios::binary);
// char buf[1024] = {0};
// while (ifs.read(buf, sizeof(buf))) // 每次读取sizeof(buf)字节
// {
// std::cout.write(buf, ifs.gcount()); // 输出实际读取的字节数
// }
// if (ifs.gcount() > 0) // 处理最后一次不足 sizeof(buf) 的读取
// {
// std::cout.write(buf, ifs.gcount());
// }
// ifs.close();
return 0;
}
写文件
cpp
#include<iostream>
#include<string>
#include<fstream>//读写文件的头文件
int main()
{
std::ofstream ofs;//输出文件流对象
ofs.open("test.txt",std::ios::out|std::ios::app);//以写方式打开文件
if(!ofs.is_open())//判断文件是否成功打开
{
std::cout<<"文件打开失败!"<<std::endl;
return -1;
}
ofs<<"Hello, World!"<<std::endl;//向文件中写入数据
ofs.close();//关闭文件
ofs.open("test.txt",std::ios::out|std::ios::binary|std::ios::app);//以二进制写方式打开文件
if(!ofs.is_open())//判断文件是否成功打开
{
std::cout<<"文件打开失败!"<<std::endl;
return -1;
}
char buffer[]="我爱学习,我爱C++,我爱编程\n";
//sizeof(buffer)会包含字符串末尾的'\0',若需忽略可改用strlen(buffer)
ofs.write(buffer,sizeof(buffer));//以二进制方式向文件中写入数据
ofs.close();//关闭文件
return 0;
}