C++文件操作

先贴上代码

// fstream.cpp : 定义控制台应用程序的入口点。
//

#include<fstream>

using namespace std;
void main()
{
	ofstream fout;
	int num;
	char a[] = "John Doe";
	fout.open("output.txt");
	num = 20;
	fout<<"here is a number:"<<num<<"\n";
	fout<<"Now here...";
	fout<<flush;
	fout.close();
}

注意:
在使用ofstream类之前,要包含<fstream>; 并且要加上using namespace std;
需要继续研究;

fout是将内存中的流写入到硬盘中,而fin则相反。
fout.open("output.txt");创建并打开了一个文件;
fout<<......<<则开始创建流;
fout<<flush;将流写入硬盘;
fout.close;关闭文件;

另附另一个实例:
/*********************************************************
* Description:iostream 与 fstream 类
* Author:charley
* DateTime:2010-12-8 22:00
* Compile Environment:win7+vs2008
***********************************************************/
 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std;
  
int main_test3() 
{ 
    //声明一个 ofstream类型的对象
    ofstream outfile( "out_file.txt" ); 
    //声明一个 ifstream类型的对象
    ifstream infile( "in_file.txt" ); 
 
    // 如文件不能打开值为 false 
    if ( ! infile ) { 
        cerr << "error: unable to open input file!\n"; 
        return -1; 
    } 
    if ( ! outfile ) { 
        cerr << "error: unable to open output file!\n"; 
        return -2; 
    } 
    string word; 
    while ( infile >> word )    //从infile文件读取内容,类似等待用户的控制台出入
        outfile << word << ' '; //向内容文件outfile写入,类似往控制台输出内容
   
 return 0; 
}
从一个名为 in_file.txt 的文本文件中读取单词,
然后把每个词写到一个名为out_file.txt的输出文件中 并且每个词之间用空格分开

return -1;
return -2;
可以在程序退出的时候知道程序是发生了什么错误退出的;

word相对于一个缓冲器
    while ( infile >> word )    //从infile文件读取内容,类似等待用户的控制台出入
	outfile << word << ' '; //向内容文件outfile写入,类似往控制台输出内容
一直到infile中没有单词之后,while才停止;
最近在看C++,学到了标准库这一章,看到cin的时候,我们经常看到很多的代码中会有这么一段
while(cin>>x){ ......}
这里我们最关注的问题是while括号里面cin>>x他每次输入的时候返回的是什么值呢。
所以我们也就会问cin的返回值是什么。
我也看到很多像我这样的新手问这样的问题,下面说下我个人的见解,如有不当之处,还请指正!

其实我倒觉得我们这个问题问错了,
我们不应该问cin返回值是什么,我觉得我们应该关注">>"输入操作符,
其实是它到底返回了什么。
因为cin是标准输入istream的一个对象,一个对象能返回什么吗?对象有返回值吗?好像没有吧!
在C++primer里面讲到过,cin>>x>>y。
有这么一行代码,我们讨论下">>"这个输入操作符,
这个操作符接收一个istream对象作为其做操作数,
接收一个对象作为其右操作数。">>"操作符返回其左操作数作为结果,
这样也就可以解释为什么上面可以将两个输入操作合并了。
因为cin>>x返回cin对象,接着又可以进行cin>>y。
所以我们就可以顺利进行输入了。
所以我们再来看上面的那个while循环,
里面的cin>>x,
返回的是cin对象(注意是输入操作符“>>”返回),
所以返回的也就可以认为是流本身了。
我们再来看下他什么时候退出循环。
因为我们已经知道了括号里面的返回值了,
所以我们看看它什么时候退出循环。


输入(cin)缓冲是行缓冲。
当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。
每当按下回车键后,cin 就会检测输入缓冲区中是否有了可读的数据,
这种情况下cin对键盘上是否有作为流结束标志CTRL+Z或者CTRL+D,
其检查的方式有两种:阻塞式以及非阻塞式。

这里借用一点网上搜到的资料:
阻塞式检查方式指的是只有在回车键按下之后才对此前是否有 Ctrl+Z 组合键按下进行检查,
非阻塞式样指的是按下 Ctrl+D 之后立即响应的方式。
如果在按 Ctrl+D 之前已经从键盘输入了字符,
则 Ctrl+D的作用就相当于回车,即把这些字符送到输入缓冲区供读取使用,
此时Ctrl+D不再起流结束符的作用。
如果按 Ctrl+D 之前没有任何键盘输入,则 Ctrl+D 就是流结束的信号。

阻塞式的方式有一个特点:只有按下回车之后才有可能检测在此之前是否有Ctrl+Z按下。
还有一个特点:
Windows下是不用CTRL+D的,如果在你的程序中使用CTRL+D的话,
如果你还有要输入的数据的话,会直接挂掉的,不能再输入了。
Windows下是使用CTRL+Z的。
在你输入CTRL+Z后,括号里面的数据变为0000 0000了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值