阿里云建站和公司建站有什么优势,张向东,金融手机网站开发,wordpress自适应教程一、文本文件
C中输入输出是通过流对象进行操作#xff0c;对于文件来说写文件就是将内容从程序输出到文件#xff0c;需要用到写文件流ofstream#xff1b;而读文件就是将内容从文件输入到程序#xff0c;需要用到读文件流ifstream#xff1b;这两个文件流类都包含在头文…一、文本文件
C中输入输出是通过流对象进行操作对于文件来说写文件就是将内容从程序输出到文件需要用到写文件流ofstream而读文件就是将内容从文件输入到程序需要用到读文件流ifstream这两个文件流类都包含在头文件fstream中对文件操作需要包含fstream。
一写文件
文本文件写入主要包括以下步骤
包含头文件#includefstream创建文件流对象 ofstream ofs以写入方式打开文件ofs.open(文件路径,ios::out);写入内容ofs写入内容;关闭文件ofs.close()
#includeiostream
#includefstream
using namespace std;int main(int argc, char const *argv[]) {ofstream ofs;ofs.open(test.txt, ios::out);ofs 姓名张三 endl;ofs 年龄20 endl;ofs.close();return 0;
}
二打开方式
打开方式描述ios::in读取方式打开文件。若文件不存在打开失败ios::out写入方式打开文件。若文件存在清空后写入文件不存在创建后写入ios::ate初始位置文件末尾。单独使用或和ios::out合用没有区别清空后写入或创建后写入和ios::in合用若文件存在末尾可写入若文件不存在打开失败ios::app末尾追加。单独使用或和ios::out/in合用没有区别文件不存在时创建写入存在时末尾追加ios::trunc若文件存在清空后写入若文件不存在创建后写入ios::binary以二进制方式写入或读取文件
三读取文件
文本文件读取主要包含以下步骤包含头文件#includefstream创建流对象ifstream ifs;以读取模式打开文件ifs.open(文件路径文件名/文件名,ios::in)读取数据常用的有4中方法。 ifs int,char,float,char *,string 等等。可读取整形、浮点型、字符型、字符串等等读取字符串时可将读取内容存入字符数组也可存入string读取字符串时一次读一行遇到空格、制表符、换行符或读取到字符数组长度-1个字符时返回。读取成功返回istream,读取失败返回false。 ifs.getline(char *buf,int size,char delim\n)一次读取一行存入字符数组遇到换行符或者读取到sizeof(buf)-1个字符返回最后一个字符需要自动添加结束字符\0;遇到限定字符delim提前返回。读取失败返回false。 getline(istream ifs,string str,char delim\n)一次读取一行存入字符串遇到换行符和限定字符delim提前返回。读取失败返回false。 int get()/ istream get(char *buf, int size,char delim\n)/istream get(char c)常用的ifstream成员get函数有这几种重载同样读取内容存入字符数组时遇到限定字符delim时提前返回后面两种读取失败返回false。 #includeiostream
#includefstream
using namespace std;
#includestring
//写文件
void write() {ofstream ofs(test.txt, ios::out);if (ofs.is_open()) {ofs 姓名张三 endl;ofs 年龄20 endl;ofs.close();}
}
//方法1
void func(ifstream ifs, char buf1[1024], string buf2) {//while (ifs buf1) {// cout buf1 endl;//}while (ifs buf2) {cout buf2 endl;}
}
//方法2
void func(ifstream ifs, char buf1[1024]) {while (ifs.getline(buf1, 1024)){cout buf1 endl;}
}
//方法3
void func(ifstream ifs, string buf2) {while (getline(ifs, buf2)) {cout buf2 endl;}
}
//方法4
void func(ifstream ifs, char c) {while (ifs.get(c)) {cout c;}
}
void doWork(char buf1[1024], string buf2, char c ) {ifstream ifs(test.txt, ios::in);if (ifs.is_open()) {if (c 1) {func(ifs, buf1, buf2);}else if (c 2) {func(ifs, buf1);}else if (c 3) {func(ifs, buf2);}else if (c 4) {func(ifs, c);}ifs.close();}
}
int main(int argc, char const *argv[]) {char buf1[1024];string buf2;char c;write();doWork(buf1, buf2, 1);doWork(buf1, buf2, 2);doWork(buf1, buf2, 3);doWork(buf1, buf2, 4);return 0;
}
二、二进制文件
一二进制文件写入
具体步骤
包含头文件#includefstream创建文件流ofstream ofs;以二进制方式打开文件ofs.open(文件名,ios::binary|ios::out);写入数据调用成员函数ostream write(const char * buffer,int len); ofs.write((const char*)ptr,sizeof(*ptr)); 字符指针buffer指向内存中一段储存空间len是要写入字节数。关闭文件ofs.close()
二二进制文件读取
具体步骤
包含头文件#includefstream创建文件流ifstream ifs;以二进制方式打开文件ifs.open(文件名,ios::binary|ios::in);读取数据调用成员函数ifstream read((char*)buf,sizeof(buf)); buf是读取内容的缓存区强转为char*按照单个字节计算读取内容。关闭文件ifs.close();
#includeiostream
using namespace std;
#includefstream
#includestring
class Person {
public:string m_Name;int m_Age;
};
void write(void) {Person p { 李四,21 };ofstream ofs(test.dat, ios::binary | ios::out);if (ofs.is_open()) {ofs.write((char*)p, sizeof(p));ofs.close();}
}
void read(void) {Person p;ifstream ifs(test.dat, ios::binary | ios::in);if (ifs.is_open()) {ifs.read((char*)p, sizeof(p));ifs.close();}cout 姓名 p.m_Name endl;cout 年龄 p.m_Age endl;
}
void test(void) {write();read();
}
int main(int argc, char const** argv) {test();return 0;
}