一个月前的东西了,漏了,现在补上。
怪不得感觉文件 *** 作很不熟悉。
文件 *** 作是一个很重要的内容,用来访问文件中的数据和改写文件中的内容。
文件 *** 作有其专属的头文件:
#inclass="superseo">clude
文件中的数据有两种存在形式:
//文本文件 - 文件以文本的ASCII码存储在计算机中
//二进制文件 - 以文本的二进制形式存储在计算机中,用户一般不能直接读懂
三种 *** 作:
ofstream:写 *** 作 ifstream:读 *** 作 fstream:读写 *** 作
其基本知识如下:
//写文件
//1、包含头文件 - #include
// 2、创建流对象 - ofstream ofs;
// 3、打开文件 - ofs.open("文件路径",打开方式);
// 4、写数据 - ofs<<"写入的数据”;
// 5、关闭文件 - ofs.close();
// 打开方式:
// iso::in 为读文件而打开文件
// iso::out 为写文件而打开文件
// iso::ate 初始位置:文件尾
// iso::app 追加方式写文件
// iso::trunc 如果文件存在先删除,再创建
// iso::binary 二进制方式
//
// 文件打开方式可以配合使用,利用| *** 作符:用二进制方式写文件 ios::binary | ios::out
文本文件写文件:
void test01()
{
ofstream ofs;
ofs.open("test.txt", ios::out);//为写文件而打开文件
ofs << "姓名:张三" << endl;
ofs << "性别:男" << endl;
ofs << "年龄:18" << endl;
ofs.close();
}
读文件 :
//读文件
void test01()
{
ifstream ifs; //定义文件流对象
ifs.open("test.txt", ios::out); //以ios::out的方式打开此文件
if (!ifs.is_open())//判断文件是否打开成功
{
cout << "文件打开失败" << endl;
return;
}
//读数据
//第一种 //右移输入运算符
char buf[1024] = { 0 };
while (ifs >> buf)
{
cout << buf << endl;
}
//第二种 //getline函数,从文件中读取sizeof(buf)个字符到buf中
char buf[1024] = { 0 };
while (ifs.getline(buf,sizeof(buf)))
{
cout << buf << endl;
}
//第三种
string buf;
while (getline(ifs,buf)) //getline函数,从ifs写入到buf中
{
cout << buf << endl;
}
//第四种
char c;
while ((c = ifs.get()) != EOF)//get函数每次只读一个字符 EOF - end of file
{
cout << c;
}
ifs.close();//关闭文件
}
二进制文件:
要用ios::out | ios::binary方式
写:
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
//ofstream ofs;
//ofs.open("person.txt", ios::out | ios::binary);
ofstream ofs("person.txt", ios::out | ios::binary);//上面两行代码的简化形式
Person p = { "张三",18 };
ofs.write((const char*)&p, sizeof(Person));
ofs.close();
}
读:
class Person
{
public:
char m_Name[64];//姓名
int m_Age;//年龄
};
//读文件
//二进制方式读文件主要利用流对象调用成员函数read
void test01()
{
//创建流对象
ifstream ifs;
//打开文件 判断文件是否打开成功
ifs.open("person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
//读文件
Person p;
ifs.read((char*)&p, sizeof(Person));
cout << "姓名:" << p.m_Name << "年龄:" << p.m_Age << endl;
ifs.close();
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)