I 话不多说,直接操作
II 步骤:
1、创建文件对象(fstream,ifstream,ofstream流):
fstream file;
2、确定文件路径;
const string file_address = "C:/Users/kakaz/Desktop/w.txt";
或者
const string file_address = "C:\\Users\\kakaz\\Desktop\\w.txt";
注意不要使用单个’’。
3、确定打开方式(写方式,定位到文件尾部)
file.open(a, ios::out|ios::ate);
4、判断文件是否存在
if (file.fail())
{
cout << "文件打开失败" << endl;
return 0;
}
5、写入数据
file << "姓名:卡卡" << endl;//后面加上换行符
file << "年龄:18" << endl;
file << "班级:控制一班" << endl;
或者利用本身write()函数
while(自定义循环条件){
char buf[100];
memset(buf,0,100);
cin>>buf; //自定义输入
//file<<buf<<endl; //写入方式1
file.write(buf,100);
};
6、关闭文件
file.close();
7、读的方式打开
file.open(file_address , ios::in);
8、读取数据(主要是要注意文件打开后其中的数据是以文件流的形式存在,也相当于cin一样存放在缓冲流,使用方法也类似)
string s;
char buf[100];
while (!file.eof()) //是否读取到文件末尾
{
file.get(buf, 100);//遇见enter结束,get只能读取一个
//file.getline(buf, 100);//此时自动舍弃enter,但是一行数据大于99会出错。
file.get();//get读取一行不会舍弃enter,所以这里要清除
file.ignore();//忽略当前字符也可以。
s.append(buf); //追加到最终文件
s.append(1,'\n');//添加被舍去的enter
}
cout << s << endl;
或者
getline(file, s,'\0');//最简洁的写法
//不要忘记写‘\0’,getline(file, s);只能读取一行数据。
或者利用自带的read()函数。
char buf[100];
memset(buf, '\0', 100);//这一步必不可少,设置初始值‘\0’和0均可。
file.read(buf, 100);//读取到buf
file.close();//关闭文件
cout << buf<< endl;//打印
III 好了,只想知道基本文件操作的小伙伴可以止步了,下面这种二进制形式更通用功能更强大,特别处理自定义类型数据
9、二进制读写文件
const char* filename = "C:\\Users\\kakaz\\Desktop\\kaka.txt";
char p;
int i = 0;
//person是自定义类型,存放姓名和年龄
person p1("卡卡", 25), p2("molaiwei", 43); //二进制放在内存
fstream ouf(filename, ios::out | ios::binary); //二进制写方式打开文件
ouf.write((char*)&p1,sizeof(p1)); //需要将自定义类型指针强转为char*。
ouf.write((char*)&p2, sizeof(p1));//长度一定要够
ouf.close();//写完了记得关闭才生效。
ifstream fim(filename, ios::in|ios::binary); //只读打开
person *p3 = new person,p4;
fim.read((char*)p3,sizeof(person));//读取的内存不要越界,不然会错误
fim.read((char*)&p4, sizeof(person));
fim.close();
p3->show();
我是卡卡呀!!!