C++文件

一、读、写和输入、输出的关系

(1)输入:读操作,将文件中的内容读到内存中。

(2)输出:写操作,将内存中的数据写到文件中。

二、打开文件方式

取值含义作用
ios_base::ininput以输入方式打开文件(默认方式)
ios_base::outoutput以输出方式打开文件。若已存在该文件,则将其内容全部清空 
ios_base::appappend以输出方式打开文件,写入的数据添加在文件末尾(默认是指向开头)
ios::base::ateat end打开一个已有的文件,文件指针指向文件末尾
ios_base::binarybinary二进制文件,默认为ASCII文件
ios_base::trunctruncate

打开一个文件,若文件已存在,则将其内容全部清空;若文件不存在,则建立新文件。

若指定ios::out方式而未指定ios::app、ios::ate、ios::in时,默认为此方式

说明:

(1)可以用位或运算(|)对openmode进行组合。

(2)打开文件时操作可能失败,如果打开操作失败,open函数返回值为0(假)。如果是构造函数打开文件且打开操作失败,则流对象的值为0(空对象)。

(3)每一个打开的文件都有一个文件指针,该指针的起始位置要么在文件末尾,要么在文件开头。每次读写都从文件指针的当前位置开始。每读写一个字节,指针就自动向后移一个字节。当文件指针移到最后,就会遇到文件结束EOF(文件结束符)。

三、文件关闭以及操作文件的成员函数

(1)void close();//关闭文件 

(2)文件输入流

函数(文件输入流)作用
istream& read(char* s,streamsize n)从文件中读n个字节到s
streampos tellg()返回文件指针的位置
istream& seekg(streampos,pos)移动文件指针到pos位置
istream& seekg(streamoff off,ios_base::seekdir dir)以dir参照off偏移移动文件指针

 (3)文件输出流

函数(文件输出流)作用
ostream& write(const char* s,streamsize n)输出s的n个字节到文件
streampos tellp()返回文件指针的位置
ostream& seekp(streampos ,pos)移动文件指针到pos位置
ostream& seekp(streamoff off,ios_base::seekdir dir)以dir参照off偏移移动文件指针
flush()文件输出流刷新

四、文件状态

文件流提供四个成员函数检查文件状态:

bool eof();   bool bad();

bool fail();    bool good();

说明:如果文件已到末尾,返回真(1),否则返回假(0)。如果在读写文件过程中出错,bad函数返回true。如对一个不是为写状态打开的文件进行写入,或者是写入的设备没有剩余空间。除了与bad函数同样的情况下会返回true以外,格式错误时fail函数也会返回true。

如果调用以上任何一个函数(前3个函数)返回true的话,good函数返回fasle。

五、文件操作举例

(1)对ASCII文件操作。

对ASCII文件的读写操作可以用以下两种方法:

1、用流插入(<<)运算符和流提取(>>)运算符输入输出标准类的数据。

2、用流对象成员函数get、getline、put等进行字符的输入输出。

实例:将源文件每行文本添加一个行号输出到目的文件中。

#include <iostream>
#include <fstream> 
#include <iomanip>
using namespace std;

int main()
{
	char s1[5000];
	int cnt=0;
	ifstream inf("c.cpp");//打开源文件读 
	if(!inf.fail())
	{
		ofstream outf("b.cpp");//创建目的文件写 
		while(!inf.eof())//是否到源文件末尾 
		{
			inf.getline(s1,sizeof(s1)-1);//读源文件字符串 
			outf<<setfill('0')<<setw(4)<<++cnt<<" "<<s1<<endl;
		}
		outf.close() ;
		inf.close();
	}
	return 0;
}

注意:文件c.app要自己先创建好。 

(2)对二进制文件操作

二进制文件打开时要用ios_base::binary指定为以二进制形式读取和存储

二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件。这是和ASCII文件不同的地方。

对二进制文件的读写操作主要是使用流成员函数read和write。

实例:复制源文件内容到目的文件(二进制文件)

#include <iostream>
#include <fstream> 
#include <iomanip>
using namespace std;

int main()
{
	char src[260],dest[260],buff[16384];//读写缓冲达到16k 
	ifstream inf("book.dat",ios_base::in|ios_base::binary);//二进制读 
	if(!inf.fail())
	{
		ofstream outf("out.dat",ios_base::out|ios_base::binary);//二进制写 
		while(!inf.eof())
		{
			inf.read(buff,sizeof(buff));
			outf.write(buff,inf.gcount());//按实际读到的字节写入
			
			cout<<buff<<endl; 
		}
		outf.close();
		inf.close();	
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值