拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 c++读取档案操作和写入档案

c++读取档案操作和写入档案

白鹭 - 2022-03-09 1960 0 0

在C++中与读取档案和写入档案简单操作有关的类分别有ifstream(档案读入)、ofstream(档案写出)、fstream (档案读入和写出),

名称 作用
ifstream 档案读入
ofstream 档案写出
fstream 档案读入和写出

对于档案操作操作输入输出类中具有一个open的函式用来打开档案使用的,其原型为:
void open(const char* filename,int mode,int access);
其中各个自变量的含义如下表:

自变量 作用
filename 需要打开的档案地址名称
mode 打开档案的方式
access 打开档案的属性

其中打开档案的方式在类中ios中定义的常用值为下表,在使用程序中可以用“|”把以上属性连接起来表或的关系,如ios::out|ios::binary

mode常用的值 作用
ios::app 以追加的方式打开档案
ios::ate 档案打开后定位到档案尾,ios:app就包含有此属性
ios::binary 以二进制方式打开档案,预设的方式是文本方式,两种方式的区别见前文
ios::in 档案以输入方式打开(档案资料输入到存储器)
ios::out 档案以输出方式打开(存储器资料输出到档案)
ios::nocreate 不建立档案,所以档案不存在时打开失败
ios::noreplace 不覆写档案,所以打开档案时如果档案存在失败
ios::trunc 如果档案存在,把档案长度设为0

 打开档案的属性取值是:

access常用的值 作用
0 普通档案,打开访问
1 只读档案
2 隐含档案
4 系统档案

再打开档案的程序中,仅需要呼叫open函式就可以打开档案并对档案内容进行操作,如

查看代码
ofstream myfile("F:\\zmxs\\date.txt",ios::app);
myfile<<"写入!"<<endl;
myfile.close();

由上面可以看出在写入和写出时,用到了一个重要的运算子插入器(<<),其实在stream类中存在两个重要的运算分别是插入器(<<)和析取器(>>)在c++中cin和cout经常可以被看到它主要实作的I/O操作,下面对插入器和析取器进行解释:
  1、插入器(<<)
 向流输出资料,比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示屏,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流,
 2、析取器(>>)
 从流中输入资料,比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定型别的资料,

同时档案操作完成后需要对档案进行关闭,让档案进行保存,使用myfile.close();myfile为你定义这个操作名称,

使用者在操作O的时候,常常使用到档案指标,通俗来讲就是你在编辑文本档案时插入文本的位置,被称为档案指标,对档案指标的位置我们可以通过seekg函式进行操作

档案指标位置在c++中的用法:

seekg常用的值 含义
ios::beg 档案头
ios::end 档案尾
ios::cur 当前位置

举个栗子:

file.seekg(0,ios::beg); //让档案指标定位到档案开头

file.seekg(0,ios::end); //让档案指标定位到档案末尾

file.seekg(10,ios::cur); //让档案指标从当前位置向档案末方向移动10个位元组

file.seekg(-10,ios::cur); //让档案指标从当前位置向档案开始方向移动10个位元组

file.seekg(10,ios::beg); //让档案指标定位到离档案开头10个位元组的位置

常用的错误判断方法:

good() 如果档案打开成功

bad() 打开档案时发生错误

eof() 到达档案尾

档案操作的代码解释

查看代码
#include<iostream>
#include <string>
#include<fstream>
#include<istream>
using namespace std;
int main()
{
ofstream outfile("F:\\zmxs\\date.txt",ios::app);
if(outfile.good())
{
outfile<<"写入!"<<endl;
outfile.close();
}
string temp;
ifstream myfile("F:\\zmxs\\date.txt");
///直接使用while会读取不到第一行
do
{
myfile >> temp;
cout<<temp<<endl;
}while(getline(myfile,temp));
myfile.close();

}
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *