您的位置:首页 > 其它

ifstream与ofstream

2015-09-21 15:43 351 查看
最近想编写一个小词典类的程序,总结了一下文件的一些操作

一、在c++中,对文件的操作时通过stream的子类fstream来实现的

为了通过流对文件进行操作,应先建立文件流对象,如下所示:

<div class="para">为了通过流对文件进行操作,应先建立文件流对象,如下所示:</div><div><div id="highlighter_874299" class="syntaxhighlighter  cpp"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp plain">ifstream iFile;</code></div><div class="line number2 index1 alt1"><code class="cpp plain">ofstream oFile;</code></div><div class="line number3 index2 alt2"><code class="cpp plain">fstream ioFile;</code></div></div></td></tr></tbody></table></div></div><div class="para">这里定义了iFile,oFile,ioFile三个文件流对象。iFile是输入文件流对象;oFile是输出文件流对象;ioFile是输入输出文件流对象。</div>


打开文件:

1、 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:

void open(const char *filename,int mode,int access);
其中 filename: 要打开的文件名
mode:     要打开文件的方式
access:   打开文件的属性


打开文件的方式:
<div class="container"><div class="line number1 index0 alt2"><code class="plain plain">ios::app:以追加的方式打开文件</code></div><div class="line number2 index1 alt1"><code class="plain plain">ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性</code></div><div class="line number3 index2 alt2"><code class="plain plain">ios::binary:以</code></div><div class="line number4 index3 alt1"><code class="plain plain">二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文</code></div><div class="line number5 index4 alt2"><code class="plain plain">ios::in:文件以输入方式打开</code></div><div class="line number6 index5 alt1"><code class="plain plain">ios::out:文件以输出方式打开</code></div><div class="line number7 index6 alt2"><code class="plain plain">ios::nocreate:不建立文件,所以文件不存在时打开失败</code></div><div class="line number8 index7 alt1"><code class="plain plain">ios::noreplace:不覆盖文件,所以保存文件时如果文件存在失败</code></div><div class="line number9 index8 alt2"><code class="plain plain">ios::trunc:如果文件存在,把文件长度设为0</code></div></div><div class="para">可以用“或”把以上属性连接起来,如ios::out|ios::binary</div><div class="para">例如:以二进制输入方式打开文件c:</div><div><div id="highlighter_291470" class="syntaxhighlighter  cpp"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp plain">fstreamfile1;</code></div><div class="line number2 index1 alt1"><code class="cpp plain">file1.open(</code><code class="cpp string">"c:config.sys"</code><code class="cpp plain">,ios::binary|ios::in,0);</code></div></div></td></tr></tbody></table></div></div><div class="para">如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:</div><div><div id="highlighter_553967" class="syntaxhighlighter  cpp"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp plain">file1.open("c:</code></div><div class="line number2 index1 alt1"><code class="cpp plain">config.sys</code><code class="cpp string">");<=>file1.open("</code><code class="cpp plain">c:config.sys",ios::in|ios::out,0);</code></div></div></td></tr></tbody></table></div></div><div class="para">另外,fstream还有和open()一样构造函数,对于上例,在定义的时候就可以打开文件了:</div>
2、
ifstream file1:则file1为以输入的方式打开
ofstream file2:则file2为以输出的方式打开


打开的属性:

0:普通文件,打开访问

1:只读文件

2:隐含文件

4:系统文件

二、读写文件

1、文本文件的读写:

用插入器:<< 用析取器:>>

例如:

file2<<"I love qq";//向文件写入字符“I love you”
int i;
file1>>i;//文件输入<div class="para">这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些</div><div class="para">操纵符 功能 输入/输出</div><div><div id="highlighter_525437" class="syntaxhighlighter  plain"><div class="container"><div class="line number2 index1 alt1"><code class="plain plain">dec格式化为十进制数值数据输入和输出</code></div><div class="line number4 index3 alt1"><code class="plain plain">endl输出一个换行符并刷新此流输出</code></div><div class="line number5 index4 alt2"><code class="plain plain">ends输出一个空字符输出</code></div><div class="line number7 index6 alt2"><code class="plain plain">hex格式化为十六进制数值数据输入和输出</code></div><div class="line number9 index8 alt2"><code class="plain plain">oct格式化为八进制数值数据输入和输出</code></div><div class="line number11 index10 alt2"><code class="plain plain">//setpxecision(intp)设置浮点数的精度位数输出</code></div><div class="line number12 index11 alt1"> </div><div class="line number13 index12 alt2"><code class="plain plain">setprecision(intp)设置浮点数的精度位数输出</code></div></div>比如要把123当作十六进制输出:file1<<hex<<123;
</div></div>
2、二进制文件的读写

<div class="para">要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:</div><div class="para">read(unsigned char *buf,int num);</div><div class="para">write(const unsigned char *buf,int num);</div><div class="para">read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,
可以用成员函数 int gcount();
来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,
值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。
例如:
<div class="container"><div class="line number1 index0 alt2"><code class="cpp plain">unsignedcharstr1[]=</code><code class="cpp string">"ILoveYou"</code><code class="cpp plain">;</code></div><div class="line number2 index1 alt1"><code class="cpp plain">intn[5];</code></div><div class="line number3 index2 alt2"><code class="cpp plain">ifstreamin(</code><code class="cpp string">"xxx.xxx"</code><code class="cpp plain">);</code></div><div class="line number4 index3 alt1"><code class="cpp plain">ofstreamout(</code><code class="cpp string">"yyy.yyy"</code><code class="cpp plain">);</code></div><div class="line number6 index5 alt1"><code class="cpp plain">out.write(str1,</code><code class="cpp functions bold">strlen</code><code class="cpp plain">(str1));</code><code class="cpp comments">//把字符串str1全部写到yyy.yyy中</code></div><div class="line number8 index7 alt1"><code class="cpp plain">in.read((unsignedchar*)n,</code><code class="cpp keyword bold">sizeof</code><code class="cpp plain">(n));</code><code class="cpp comments">//从xxx.xxx中读取指定个整数,注意</code><code class="cpp plain">类型转换</code></div><div class="line number9 index8 alt2"><code class="cpp plain">in.close();
out.close();</code></div></div>
</div>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: