加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++文件读写操作总结

(2014-03-11 20:45:43)
标签:

c

文件读写

fstream

it

分类: VC
首先,先看一下基础的C++文件操作和用法。
http://www.cnblogs.com/ifeiyun/articles/1573134.html
http://blog.csdn.net/mafuli007/article/details/7314917

C++文件读写头文件:#include

 

 两类命令:

1 tellg/tellp (提取当前文件指针的位置  

2 seekg/seekp (定位将文件指针移到某处)。

调用格式,比如我建立了一个文件对象 fstream file。可以这么用:

file.tellg( ) 不用加参数

file.seekg( long  tem) tem是你所要定位到文件的那个位置

l  fstream 建立的文件对象两类命令都可以用

l  ifstream 建立的文件对象只能用tellgseekg

l  ofstream  建立的文件对象只能用tellpseekp

  

三个读写方式:

fstream   2 ofstream  3 ifstream

这三种方式建立的文件对象,不管哪一种,如果文件指针移到了文件末尾,此时你若对文件进行读取操作,那么文件就会进入“死机”状态,该文件就不能进行读写操作了,也不能通过seekg/seekp命令来移动文件指针的位置。要想该文件可用,你只有关闭该文件再重新打开生效。(可以用内部函数open再次打开)

不管什么方式建立对象,刚打开的文件,文件指针都是在文件的头部,也就是file.tellg( )=0

不管什么方式建立对象,每执行一读/写操作,文件指针自动后移。

 

fstream

fstream  file(“filename”,打开方式)

其中,file 是自己取名字的,filename也一样是自己取名。

打开方式有:ios::in(可读取) ios::out (可写入)  ios::app  其中ios::binary 二进制打开,可以省略,不做要求。

 

1  fstream file(“filename”)  fstream file(“filename”ios::in|ios::out) 功能相同

只能打开存在的文件,不清空该文件内容,可以定位读写。如果要写位置源文件有数据,这写后原数据被覆盖

 

2        fstream file(“filename”ios::in|ios::out|ios::app)

可以新建一个文件,或打开已存在的文件(文件存在是不清空他的内容)

文件写操作只能是写在文件尾部,即使你用seekg/seekp将文件指针移到你所想要写的位置,也不能实现。而读取文件可以定位读取。

 

3        fstream file(“filename”,ios::app) fstream file(“filename”ios::in|ios::app)

不管文件存在与否,该方式都打开不了文件

 

4        fstream file(“filename”ios::out|ios::app)

1 不同的是:该方式建立的文件不能读取,一执行读操作文件“死机”

 

5         fstream file(“filename”ios::out)

 可以新建一个文件,若文件存在则清空该文件。不可以进行读操作,一读也会“死机”。但是可以定位写

6        fstream file(“filename”ios::in)

只可以打开存在的文件,可以定位读取,但不可执行写操作,写操作会使文件“死机”。

 

  ofstream

  该方式里,读操作(ofile.read())是编译通过不了的

1 ofstream ofile(filename) ofstream ofile(filename”,ios::out)

   可以新建一个文件,若文件存在这清空。可以定位写

 

2 ofstream ofile(filename”,ios::in|ios::out) ofstream ofile(filename”,ios::in)

 只能打开存在的文件,但是不清空文件。可以定位写


3 ofstream ofile(filename)

在该方式下,加上ios::in ,ios::out 都是不起作用的。

该方式可以新建文件,文件存在时不清空。不能定位写,只能写在文件尾部。

 

ifstream

该方式里,读操作(ifile.write())是编译通过不了的

1

ifstream ifile(filename)

ifstream ofile(filename,ios::in)

ifstream ifile(filename,ios::out)

ifstream ifile(filename,ios::out|ios::in)

ifstream ifile(filename,ios::in|ios:;app)

都只能打开存在的文件,只能读取,而且可以定位读取

 

2

ifstream ifile(filename,ios::out|ios::app)

ifstream ifile(filename,ios::in|ios::out|ios::app)

可以新建文件,文件存在时不清空,可以定位读取。

 

3        ifstream file("she.txt",ios::app)

不管文件存在与否,都打开失败,也新建不了。

  

文件的读写格式:

文件对象名(如fileifileofile,这这是自己定的名字,是随意的) 文件名filename也是自己定。

举例

fstream hehe(“hello.txt,ios::in|ios:;app//hehe是一个文件对象

hehe.read((char*)&st,sizeof(st));

hehe.write((char*)&st,sizeof(st));

注意:char*不能省略,应为读写只能以字符型读写,所以要强制类型转换。st是一个类型的名字,可以是intfloatchar,结构体,等一切类型。该类型要看你文件里存储的是什么类型,和文件里的类型匹配,那么读取的数据更有规则。

如果是结构体存储进去的,那么以结构体读取出来就可以实现块的读取,不会乱掉。


PS:感谢波波同学的无私奉献http://www/uc/myshow/blog/misc/gif/E___6724EN00SIGG.gif

 


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有