C++文件读写操作总结
(2014-03-11 20:45:43)
标签:
c文件读写fstreamit |
分类: VC |
C++文件读写头文件:#include
1 tellg/tellp (提取当前文件指针的位置)
2 seekg/seekp (定位将文件指针移到某处)。
调用格式,比如我建立了一个文件对象 fstream file。可以这么用:
file.tellg( ) 不用加参数
file.seekg( long
l
l
l
三个读写方式:
1
这三种方式建立的文件对象,不管哪一种,如果文件指针移到了文件末尾,此时你若对文件进行读取操作,那么文件就会进入“死机”状态,该文件就不能进行读写操作了,也不能通过seekg/seekp命令来移动文件指针的位置。要想该文件可用,你只有关闭该文件再重新打开生效。(可以用内部函数open再次打开)
不管什么方式建立对象,刚打开的文件,文件指针都是在文件的头部,也就是file.tellg( )=0
不管什么方式建立对象,每执行一读/写操作,文件指针自动后移。
一 fstream
fstream
其中,file 是自己取名字的,filename也一样是自己取名。
打开方式有:ios::in(可读取)
1
只能打开存在的文件,不清空该文件内容,可以定位读写。如果要写位置源文件有数据,这写后原数据被覆盖
2
可以新建一个文件,或打开已存在的文件(文件存在是不清空他的内容)
文件写操作只能是写在文件尾部,即使你用seekg/seekp将文件指针移到你所想要写的位置,也不能实现。而读取文件可以定位读取。
3
不管文件存在与否,该方式都打开不了文件
4
与1 不同的是:该方式建立的文件不能读取,一执行读操作文件“死机”
5
6
只可以打开存在的文件,可以定位读取,但不可执行写操作,写操作会使文件“死机”。
二
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
不管文件存在与否,都打开失败,也新建不了。
文件的读写格式:
文件对象名(如file,ifile,ofile,这这是自己定的名字,是随意的) 文件名filename也是自己定。
举例
fstream hehe(“hello.txt”,ios::in|ios:;app)//hehe是一个文件对象
hehe.read((char*)&st,sizeof(st));
hehe.write((char*)&st,sizeof(st));
注意:char*不能省略,应为读写只能以字符型读写,所以要强制类型转换。st是一个类型的名字,可以是int,float,char,结构体,等一切类型。该类型要看你文件里存储的是什么类型,和文件里的类型匹配,那么读取的数据更有规则。
如果是结构体存储进去的,那么以结构体读取出来就可以实现块的读取,不会乱掉。
PS:感谢波波同学的无私奉献http://www/uc/myshow/blog/misc/gif/E___6724EN00SIGG.gif