C++ 文件操作
2014-06-11 18:49
309 查看
fstream:
ifstream
ofstream
fstream
1、打开
因为构造函数会调用想用的open函数,所以打开某个文件的两种方法:
方法1:
ifstream infile;
infile.open("in");
方法2:
ifstream infile("in");
open()函数原型:
void open (const char * filename, openmode mode);
这里filename 是一个字符串,代表要打开的文件名,mode 是以下标志符的一个组合:
in :打开文件做读操作
out: 打开文件做写操作
ate:打开文件后立即将文件定位到文件尾
app: 在每次写之前找到文件尾
trunc:打开文件时,清空已经存在的文件流
binary:以二进制模式进行二进制操作
有用的组合有:
out 打开文件做写操作,删除文件中已有的数据
out|app 打开文件做写操作,在文件尾写入
out|trunc 与out模式相同
in 打开文件做读操作
in|out 打开文件做读、写操作,并定位于文件开头处
in|out|trunc 打开文件做读写操作,删除文件中已有的数据
上述所有打开组合都可以添加ate模式,对这些模式添加ate只会改变文件打开时的初始定位,在每次读写之前,将文件定位于文件尾
对于ofstream打开的文件,要保存文件中已有的数据,唯一方法是显示的指定app模式打开
如果不指定mode,则会调用默认构造函数,三者不同:
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out //文件同时以in和out打开时,不清空
2、检验打开是否成功(这是一个好的编程习惯)
接下来要检验打开是否成功:
if(infile) //返回true,说明打开成功,false,说明打开失败
3、流的状态
流的状态由bad、fail、eof、good操作揭示。
如果bad、fail、eof中任意一个为ture,则检查流本身将显示该流处于错误状态;相反,如果这三个条件没有一个为ture,则good操作将返回true(所有都返回bool型返回值):
bad()
如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。
fail()
除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。
eof()
如果读文件到达文件末尾,返回true。
good()
这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。
要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数。
【注】:
1、将文件流与新文件重新绑定前,要先关闭现在的文件:
…………
infiile.close();
infile.open("2.txt");
…………
2、关闭流并不能改变流对象的内部状态。如果最后的读写操作失败了,对象的状态将保持为错误模式,直到执行clear操作重新恢复流的状态为止
in_file可以打开新的文件,但并不会影响流的状态,流的状态需要用clear()函数恢复
ifstream
ofstream
fstream
1、打开
因为构造函数会调用想用的open函数,所以打开某个文件的两种方法:
方法1:
ifstream infile;
infile.open("in");
方法2:
ifstream infile("in");
open()函数原型:
void open (const char * filename, openmode mode);
这里filename 是一个字符串,代表要打开的文件名,mode 是以下标志符的一个组合:
in :打开文件做读操作
out: 打开文件做写操作
ate:打开文件后立即将文件定位到文件尾
app: 在每次写之前找到文件尾
trunc:打开文件时,清空已经存在的文件流
binary:以二进制模式进行二进制操作
有用的组合有:
out 打开文件做写操作,删除文件中已有的数据
out|app 打开文件做写操作,在文件尾写入
out|trunc 与out模式相同
in 打开文件做读操作
in|out 打开文件做读、写操作,并定位于文件开头处
in|out|trunc 打开文件做读写操作,删除文件中已有的数据
上述所有打开组合都可以添加ate模式,对这些模式添加ate只会改变文件打开时的初始定位,在每次读写之前,将文件定位于文件尾
对于ofstream打开的文件,要保存文件中已有的数据,唯一方法是显示的指定app模式打开
如果不指定mode,则会调用默认构造函数,三者不同:
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out //文件同时以in和out打开时,不清空
2、检验打开是否成功(这是一个好的编程习惯)
接下来要检验打开是否成功:
if(infile) //返回true,说明打开成功,false,说明打开失败
3、流的状态
流的状态由bad、fail、eof、good操作揭示。
如果bad、fail、eof中任意一个为ture,则检查流本身将显示该流处于错误状态;相反,如果这三个条件没有一个为ture,则good操作将返回true(所有都返回bool型返回值):
bad()
如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。
fail()
除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。
eof()
如果读文件到达文件末尾,返回true。
good()
这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。
要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数。
【注】:
1、将文件流与新文件重新绑定前,要先关闭现在的文件:
…………
infiile.close();
infile.open("2.txt");
…………
2、关闭流并不能改变流对象的内部状态。如果最后的读写操作失败了,对象的状态将保持为错误模式,直到执行clear操作重新恢复流的状态为止
in_file可以打开新的文件,但并不会影响流的状态,流的状态需要用clear()函数恢复
相关文章推荐
- C++中基本的文件操作
- C++中的文件操作
- c++文件常见操作示例
- borland c++ bulder的文件操作总结
- C++ 文件操作
- c++ 资源文件操作
- C++文件操作之二 : C++ 的fstream类提供的文件操作
- C++简易文件操作源代码
- C/C++文件操作
- C++中的文件操作
- DirectShow : AVI文件操作 -- C++ 类
- c++ 操作.ini 文件(适用平台linux windows)
- C++基本文件操作
- C++中关于文件操作的函数
- (补课)borland c++ bulder的文件操作总结-4
- (补课)borland c++ bulder的文件操作总结-3
- c++中关于文件操作资料收集(值得收藏)
- C++中文件操作的一些函数
- c++的文件操作
- (补课)borland c++ bulder的文件操作总结-1