C文件操作详解ifstreamofstreamfstream

合集下载

C++文件操作详解(ifstream、ofstream、fstream)

C++文件操作详解(ifstream、ofstream、fstream)

C++文件操作详解〔ifstream、ofstream、fstream〕C++ 通过以下几个类支持文件的输入输出:•ofstream: 写操作〔输出〕的文件类(由ostream引申而来)•ifstream: 读操作〔输入〕的文件类(由istream引申而来)•fstream: 可同时读写操作的文件类(由iostream引申而来)翻开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说翻开一个文件。

被翻开的文件在程序中由一个流对象(stream object)来表示(这些类的一个实例) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操作。

要通过一个流对象翻开一个文件,我们使用它的成员函数open():void open (const char * filename, openmode mode);这里filename 是一个字符串,代表要翻开的文件名,mode 是以下标志符的一个组合:这些标识符可以被组合使用,中间以〞或〞操作符(|)间隔。

例如,如果我们想要以二进制方式翻开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数open〔〕来实现:ofstream file;file.open ("example.bin", ios::out | ios::app | ios::binary);ofstream, ifstream 和fstream所有这些类的成员函数open 都包含了一个默认翻开文件的方式,这三个类的默认方式各不一样:只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。

如果函数被调用时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。

由于对类ofstream, ifstream 和fstream 的对象所进展的第一个操作通常都是翻开文件,这些类都有一个构造函数可以直接调用open 函数,并拥有同样的参数。

fstream头文件用法

fstream头文件用法

fstream头文件用法fstream头文件是C++标准库中的一个头文件,用于处理文件输入输出操作。

它提供了三个类,ifstream(用于从文件中读取数据)、ofstream(用于向文件中写入数据)和 fstream(同时具有读写功能的文件操作类)。

要使用 fstream 头文件,首先需要包含它:C++。

#include <fstream>。

接下来,你可以使用这个头文件中定义的类来进行文件的读写操作。

首先,你需要创建一个文件流对象,并打开一个文件。

例如,如果你想要从文件中读取数据,你可以使用 ifstream 类:C++。

std::ifstream infile;infile.open("input.txt");这将打开一个名为 "input.txt" 的文件,使得你可以从中读取数据。

如果你想要向文件中写入数据,你可以使用 ofstream 类:C++。

std::ofstream outfile;outfile.open("output.txt");这将创建一个名为 "output.txt" 的文件,使得你可以向其中写入数据。

如果你需要同时进行读写操作,你可以使用 fstream 类: C++。

std::fstream file;file.open("data.txt");这将打开一个名为 "data.txt" 的文件,使得你可以进行读写操作。

一旦你打开了文件,你就可以使用流操作符(<< 和 >>)来进行数据的读写操作,就像你操作标准输入输出流一样。

例如,你可以用 << 操作符将数据写入文件,用 >> 操作符从文件中读取数据。

完成文件操作后,你应该关闭文件,以释放资源。

你可以使用close() 方法来关闭文件流:C++。

C++文件读写详解(ofstream,ifstream,fstream)

C++文件读写详解(ofstream,ifstream,fstream)

C++⽂件读写详解(ofstream,ifstream,fstream)相关的头⽂件:#include <fstream>需要相关的类fstream提供三种类,实现C++对⽂件的操作ofstream:写操作,由ostream引申⽽来ifstream:读操作,由istream引申⽽来fstream :同时读写操作,由iostream引申⽽来⽂件的类型:⽂本⽂件和⼆进制⽂件⽂件读写的步骤:1、包含的头⽂件:#include <fstream>2、创建流3、打开⽂件(⽂件和流关联)4、读写 (写操作:<<,put( ), write( ) 读操作: >> , get( ),getline( ), read( ))5、关闭⽂件:把缓冲区数据完整地写⼊⽂件,添加⽂件结束标志,切断流对象和外部⽂件的连接⽂件的读写:1、⽂本⽂件的读写:⽅法:⼀次性读写若⼲字符1)使⽤运算符<< 和 >>进⾏读写功能:<< 能实现以⾏为单位写⼊⽂件>> 不能⼀⾏为单位读⼊内存,总是以空格、Tab、回车结束,⽽是以单词为单位代码:函数功能:使⽤<< ,写⼊⽂件⼀⾏字符#include <fstream>#include <iostream>using namespace std;void main(){ ofstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开⽂件错误!"<<endl; exit(0); } OpenFile<<"abc def ghi"; OpenFile.close(); system("pause");}运⾏结果:⽂件中写⼊内容:abc def ghi函数功能:使⽤>>,从⽂件读⼊⼀个单词#include <fstream>#include <iostream>using namespace std;void main(){ const int len=20; char str[len];ifstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile>>str;cout<<str<<endl;OpenFile.close();system("pause");}运⾏结果:str的内容为abc,⽽不是abc def ghi(见空格停⽌)2)使⽤运算符<<(写)和getline()进⾏读写功能:<<:以⾏为单位输⼊⽂件getline():以⾏为单位读⼊内存,能⼀次读⼊⼀⾏函数原型:istream &getline( char *buffer, streamsize num );功能:getline( )函数⽤于从⽂件读取num-1个字符到buffer(内存)中,直到下列情况发⽣时,读取结束:1):num - 1个字符已经读⼊2):碰到⼀个换⾏标志3):碰到⼀个EOF代码:#include <fstream>#include <iostream>using namespace std;void main(){ const int len=20; char str[len];ifstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.getline(str,20);cout<<str<<endl;OpenFile.close();system("pause");}运⾏结果:str的内容为abc def ghi (⼀直把⼀⾏读完)⼀次读写⼀个字符:使⽤get( )和put( )函数函数声明:istream& get(char &c);函数功能:使⽤ get( )函数把字符1输⼊到⽂件#include <fstream>#include <iostream>using namespace std;void main(){ char ch='1';ofstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.put(ch);OpenFile.close();system("pause");}运⾏结果:把字符1写⼊⽂件函数功能:使⽤ put( )函数把⽂件中第⼀个字符输⼊内存#include <fstream>#include <iostream>using namespace std;void main(){ char ch;ifstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.get(ch);cout<<ch;OpenFile.close();system("pause");}运⾏结果:把字符1从⽂件中读到ch(内存)中2、⼆进制⽂件的读写:1)使⽤运算符get( ) 和 put( )读写⼀个字节功能:get( ) :在⽂件中读取⼀个字节到内存函数原型:ifstream &get(char ch)put( ) :在内存中写⼊⼀个字节到⽂件函数原型:ofstream &put(char ch)代码:功能:把26个字符写⼊⽂件中#include <fstream>#include <iostream>using namespace std;void main(){ char ch='a';ofstream OpenFile("file.txt",ios::binary); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);} for (int i=0;i<26;i++){OpenFile.put(ch);ch++;}OpenFile.close();system("pause");}运⾏结果:⽂件内容为abcdefghijklmnopqlst...z 功能:把⽂件中的26个字母读⼊内存#include <fstream>#include <iostream>using namespace std;void main(){ char ch;ifstream OpenFile("file.txt",ios::binary); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);} while (OpenFile.get(ch))cout<<ch;OpenFile.close();system("pause");}运⾏结果:ch依次为abc...z2)使⽤read()和write()进⾏读写 read( ):功能:从⽂件中提取 n 个字节数据,写⼊buf指向的地⽅中函数声明:istream & read ( char * buf , int n ) ;代码:函数功能:使⽤write( )函数,⼀次从内存向⽂件写⼊⼀⾏数据#include <fstream>#include <iostream>using namespace std;void main(){ char ch[12]="12 3 456 78";ofstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.write(ch,12);OpenFile.close();system("pause");}运⾏结果:⽂件内容12 3 456 78write( ):功能:把buf指向的内容取n个字节写⼊⽂件函数声明:ostream & ostream :: write ( char * buf , int n ) ;参数说明:buf表⽰要写⼊内存的地址,传参时要取地址。

VC++中对文件的写入和读取

VC++中对文件的写入和读取

VC++中对文件的写入和读取本文介绍两种方法对文件进行读取和写入操作:1、采用fstream 类;2、采用CStdioFile类。

CStdioFile继承自CFile,一个CStdioFile对象代表一个用运行时函数fopen 打开的C 运行时流式文件。

C++中的fstream类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O。

stream类有两个重要的运算符:插入器(<<)和析取器(>>)。

插入器(<<)即向流输出数据,析取器(>>)即从流中输入数据。

在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。

fstream类包括向“流”输出数据的ofstream类和从“流”中输出数据的ifstream类。

1、文件的写入往文件中写入数据的操作较为简单,这里以fstream类中往文件写入数据为例,介绍VC++中对文件的写入方法。

对于用CstdioFile 类对文件进行写入操作可参看相关资料。

下面给出采用fstream类对文件进行写入操作的代码:#include <fstream.h>ofstream of1;//创建对象of1.open("数据记录.txt",ios::out,filebuf::openprot);//打开文件int i;//定义一个整型变量float f; //定义一个单精度浮点型变量double d; //定义一个双精度浮点型变量i=123;//赋值f=3.478f; //赋值d=859.653; //赋值of1<<i<<’\t’<<f<<’\t’<<d;//写入数据of1.close();//关闭文件运行后打开“数据记录.txt”文件,内容见图1,变量i,f,d已写入文件中。

c中文件流基本用法(fstream,ifstream,ostream)

c中文件流基本用法(fstream,ifstream,ostream)

c中文件流基本用法(fstream,ifstream,ostream)c++文件流基本用法(fstream,ifstream,ostream)前言:c++的文件流处理其实很简单,前提是你能够理解它。

文件流本质是利用了一个buffer中间层。

有点类似标准输出和标准输入一样。

c++IO的设计保证IO效率,同时又兼顾封装性和易用性。

本文将会讲述c++文件流的用法。

有错误和疏漏的地方,欢迎批评指证。

需要包含的头文件:名字空间:std也可以试用fstream提供了三个类,用来实现c++对文件的操作。

(文件的创建,读写)。

ifstream--从已有的文件读ofstream--向文件写内容fstream-打开文件供读写支持的文件类型实际上,文件类型可以分为两种:文本文件和二进制文件.文本文件保存的是可读的字符,而二进制文件保存的只是二进制数据。

利用二进制模式,你可以操作图像等文件。

用文本模式,你只能读写文本文件。

否则会报错。

例一:写文件声明一个ostream变量1.调用open方法,使其与一个文件关联2.写文件3.调用close方法.1.#include2.3.void main4.{5.ofstream file;6.7.file.open("file.txt");8.9.file<<"Hello file/n"<<75;10.11.file.close();12.}可以像试用cout一样试用操作符<<向文件写内容. Usages:1.2.file<<"string/n";3.file.put('c');例二:读文件1.声明一个ifstream变量.2.打开文件.3.从文件读数据4.关闭文件.1.#include2.3.void main4.{5.ifstream file;6.char output[100];7.int x;8.9.file.open("file.txt");10.11.file>>output;12.cout<<output;< p="">13.file>>x;14.cout<<x;< p="">15.16.file.close();17.}同样的,你也可以像cin一样使用>>来操作文件。

C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组

C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组

C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组fstream提供了三个类,用来实现c++对文件的操作。

(文件的创建、读、写)。

ifstream -- 从已有的文件读ofstream --向文件写内容fstream -打开文件供读写文件打开模式:ios::in 读ios::out 写ios::app从文件末尾开始写ios::binary 二进制模式ios::nocreate打开一个文件时,如果文件不存在,不创建文件。

ios::noreplace打开一个文件时,如果文件不存在,创建该文件ios::trunc打开一个文件,然后清空内容ios::ate 打开一个文件时,将位置移动到文件尾文件指针位置在c++中的用法:ios::beg 文件头ios::end 文件尾ios::cur当前位置例子:file.seekg(0,ios::beg); //让文件指针定位到文件开头file.seekg(0,ios::end); //让文件指针定位到文件末尾file.seekg(10,ios::cur);//让文件指针从当前位置向文件末方向移动10个字节file.seekg(-10,ios::cur);//让文件指针从当前位置向文件开始方向移动10个字节file.seekg(10,ios::beg);//让文件指针定位到离文件开头10个字节的位置常用的错误判断方法:good() 如果文件打开成功bad() 打开文件时发生错误eof() 到达文件尾实例:一、写入文件#include <iostream>#include <fstream>using namespace std;void main(){ofstream in;in.open("com.txt",ios::trunc); //ios::trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建int i;char a='a';for(i=1;i<=26;i++)//将26个数字及英文字母写入文件{if(i<10){in<<"0"<<i<<"\t"<<a<<"\n";a++;}else{in<<i<<"\t"<<a<<"\n";a++;}}in.close();//关闭文件}打开com.txt,效果如下:二、读取文件上面仅仅是将文本写入文件,并没有读取出来。

C++中文件流(fstream)的使用方法及示例

C++中文件流(fstream)的使用方法及示例

【转载】C++中文件流(fstream)的使用方法及示例(2011-08-22 16:00:14)转载▼分类:编程拾萃标签:杂谈C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流头文件:#include <fstream>//创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include<iomanip.h>#include<fstream>void main(){ofstream ofs("C:\\example.txt"); //打开文件用于写,若文件不存在就创建它if (!ofs) return; //打开文件失败则结束运行f1 << setw(20) << "Name: " << "Beethoven" << endl; //使用插入运算符写文件内容f1 << setw(20) << "song: " << "Moonlight Sonata" << endl; f1.close(); //关闭文件}文件操作:打开文件文件名注意路径名中的斜杠要双写,如:"D:\\MyFiles\\ReadMe.txt"文件打开方式选项:ios::in = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式)ios::out = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)ios::ate = 0x04, //文件打开时,指针在文件最后。

可改变指针的位置,常和in、out联合使用ios::app = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后ios::trunc = 0x10, // 在读写前先将文件长度截断为0(默认)ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用ios::binary = 0x80 //二进制格式文件文件保护方式选择项:filebuf::openprot; //默认的兼容共享方式filebuf::sh_none; //独占,不共享filebuf::sh_read; //读共享filebuf::sh_write; //写共享打开文件的方法调用构造函数时指定文件名和打开模式ifstream f("d:\\12.txt", ios::nocreate); //默认以 ios::in 的方式打开文件,文件不存在时操作失败ofstream f("d:\\12.txt"); //默认以 ios::out的方式打开文件fstream f("d:\\12.dat", ios::in|ios::out|ios::binary); //以读写方式打开二进制文件使用Open成员函数fstream f;f.open("d:\\12.txt",ios::out); //利用同一对象对多个文件进行操作时要用到open函数检查是否成功打开成功:if (f) {...} //对ifstream、ofstream对象可用,fstream对象不可用。

fstream和ifstream详细用法

fstream和ifstream详细用法

文件 I/O 在C++中比烤蛋糕简单多了。

在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。

一、ASCII 输出 为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代< fstream.h>,所有的C++标准头文件都是无后缀的。

)。

这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。

我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。

如果你猜是"fstream," 恭喜你答对了! 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。

如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。

我们现在开始讲输出部分,首先声明一个类对象。

ofstream fout; 这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。

fout.open("output.txt"); 你也可以把文件名作为构造参数来打开一个文件.ofstream fout("output.txt"); 这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。

C ofstream与ifstream详细用法

C   ofstream与ifstream详细用法

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(&lt;&lt;)向流输出数据。

比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout&lt;&lt;"Write Stdout"&lt;&lt;'n';就表示把字符串"Write Stdout"和换行字符('n')输出到标准输出流。

2、析取器(&gt;&gt;)从流中输入数据。

比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin&gt;&gt;x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。

下面就把此类的文件操作过程一一道来。

一、打开文件在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int mode,int access);参数:filename:要打开的文件名mode:要打开文件的方式access:打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app:以追加的方式打开文件ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性ios::binary:以二进制方式打开文件,缺省的方式是文本方式。

两种方式的区别见前文ios::in:文件以输入方式打开(文件数据输入到内存)ios::out:文件以输出方式打开(内存数据输出到文件)ios::nocreate:不建立文件,所以文件不存在时打开失败ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败ios::trunc:如果文件存在,把文件长度设为0可以用“或”把以上属性连接起来,如ios::out|ios::binary打开文件的属性取值是:0:普通文件,打开访问1:只读文件2:隐含文件4:系统文件可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。

c++中文件操作的基本步骤

c++中文件操作的基本步骤

在C++中,文件操作的基本步骤通常包括以下步骤:1. 包含头文件:在C++程序中,需要包含头文件`<fstream>`来使用文件操作相关的函数和类。

```cpp#include <fstream>```2. 创建文件流对象:使用`ifstream`、`ofstream`或`fstream`类来创建文件流对象。

这些类分别用于读取文件、写入文件和读写文件。

```cppstd::ifstream inputFile; // 用于读取文件的文件流对象std::ofstream outputFile; // 用于写入文件的文件流对象std::fstream generalFile; // 用于读写文件的文件流对象```3. 打开文件:使用文件流对象的`open()`函数来打开一个文件。

需要提供文件名和打开模式(只读、只写、读写等)。

```cppinputFile.open("example.txt", std::ios::in); // 以只读模式打开文件outputFile.open("example.txt", std::ios::out); // 以只写模式打开文件generalFile.open("example.txt", std::ios::in | std::ios::out); // 以读写模式打开文件```4. 读写文件:使用文件流对象的输入/输出运算符(`>>`、`<<`)或其他函数来读写文件。

```cppinputFile >> num; // 从文件中读取一个整数outputFile << "Hello"; // 向文件中写入字符串generalFile.seekg(0, std::ios::end); // 将文件指针移动到文件末尾generalFile << "World"; // 向文件中写入字符串```5. 关闭文件:使用文件流对象的`close()`函数来关闭一个文件。

C++文件读写详解(ofstream,ifstream,fstream)及C++ string类

C++文件读写详解(ofstream,ifstream,fstream)及C++ string类

在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java]view plaincopyprint?1.#include <fstream>2.ofstream //文件写操作内存写入存储设备3.ifstream //文件读操作,存储设备读区到内存中4.fstream //读写操作,对打开的文件可进行读写操作1.打开文件在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作函数:open()[cpp]view plaincopyprint?1.<span style="font-family: Times New Roman; font-size: 16px;">2.public member function3.4.void open ( const char * filename,5. ios_base::openmode mode = ios_base::in | ios_base::out );6.7.void open(const wchar_t *_Filename,8. ios_base::openmode mode= ios_base::in | ios_base::out,9.int prot = ios_base::_Openprot);10.11.</span>1.ofstream out;2.out.open("Hello.txt", ios::in|ios::out|ios::binary) //根据自己需要进行适当的选取1.<span style="font-family: Times New Roman; font-size: 16px;">2.ofstream out("...", ios::out);3.ifstream in("...", ios::in);4.fstream foi("...", ios::in|ios::out);5.6.</span>当使用默认方式进行对文件的操作时,你可以使用成员函数is_open()对文件是否打开进行验证2.关闭文件当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。

C++流操作之fstream用法介绍

C++流操作之fstream用法介绍

C++流操作之fstream⽤法介绍在Windows平台对⽂件进⾏存取操作可选的⽅案有很多,如果采⽤纯C,则需要⽤到File*等,当然也可以直接调⽤Windows API来做;如果采⽤C++,⾸先想到的就是⽂件流fstream。

虽然在COM层⾯上,我们还可以使⽤IStream来实现⽂件的读写,其效率也⾮常⾼。

不过本⽂仅对C++流操作做简单的探讨,相⽐于Windows API或IStream,C++的流操作通⽤性更好⼀些,因为你能轻松将代码移植到其它平台上。

fstream有两个派⽣类,即ifstream和ofstream,分别对应输⼊⽂件流、输出⽂件流。

在使⽤它们之前,必须将它们的头⽂件包含到你的cpp⽂件中。

创建⼀个⽂件流的⽅法很简单:ifstream fin;fin.open("C:\filename.txt");这样就创建了⼀个输⼊⽂件流fin,它对应的⽂件是C盘根⽬录下的filename.txt。

实际上,open⽅法还包含⼀个参数mode,⽤以指定其打开⽅式。

ios::in 以读取⽅式打开⽂件ios::out 以写⼊⽅式打开⽂件ios::ate 存取指针在⽂件末尾ios::app 写⼊时采⽤追加⽅式ios::trunc 写⼊时抹去旧数据ios::binary 以⼆进制⽅式存取上⾯的代码并未指定任何打开⽅式,则采⽤默认参数:输⼊⽂件流即ios::in,输出⽂件流即ios::out。

⼀般在需要组合特殊的mode才显式指定,⽐如:ios::in | ios::binary; //以⼆进制⽅式读取⽂件除此之外,还可以在构造时指定相应的⽂件路径和名称,让创建过程⼀步到位。

上述代码可改写为:ifstream fin("C:\filename.txt");与open⽅法相反的是close⽅法,它的作⽤与open正好相反。

open是将⽂件流对象与外设中的⽂件关联起来,close则是解除⼆者的关联。

C++文件输入输出流

C++文件输入输出流

C++文件输入输出流文件操作在操作系统的底层中十分复杂。

然而,C++已经为我们做了文件操作的绝大部分工作。

程序员只要以流的概念来实施文件操作即可。

文件有两种,一种是文本文件,其内容总是与字符码表(如ASCII码)对应。

另一种是二进制文件,可以将内容看成0/1串。

本次课我们只讨论C++中文本文件的读写。

一、文件输入流类ifstreamI ifstream是文件输入流类的类名。

定义一个该类的对象,即可将该对象和一个文件建立联系。

例如,ifstream fin(“a.txt”)表示定义一个文件输入流类的对象fin,并将该对象与当前目录下的a.txt文件建立联系,以后可以用该对象从a.txt中读取数据。

【例1 按行读取一个文本文件的所有内容,并输出到屏幕。

】#include <iostream>#include <fstream> //使用ifstream类需要包含头文件fstream#include <string> //使用string类需要包含头文件stringusing namespace std;int main(){ifstream fin("in.txt"); //默认打开文本文件string str;while (getline(fin, str)){cout<<str<<endl;}return 0;}getline(fin, str)表示从输入文件流中读入一行数据,放入string类型的变量str 中。

由于整行整行地读入,读入到str中时,文件中的每个换行符都被丢掉了。

为了照文件原样输出,在cout流上输出str的同时,还要再补上一个回车符。

许多输入/输出语句都能返回操作状态(true或false),例如if (cin>>a)cout<<a; //若读入失败,则跳过cout<<a;if (getline(in, str)cout<<str; //若读入失败,则跳过cout<<str;if (cin)cin>>a; //若文件流状态正常,则输入所以在循环读入数据时,常常将读入操作放在循环的条件判断上,这样既省事,又明白。

C++文件流的详解

C++文件流的详解

C++⽂件流的详解C++⽂件流操作是基础内容之⼀,但是内容繁杂,其实会者不难,这⾥简单概述⼀下:需要调⽤的类:#include<fstream>读⼊/输出有两种⽅法,第⼀种是流的⽅法。

读⼊:ifstream file("InterestSettings.dat");if (file){while (!file.eof()){file >> alive >> threemonth >> halfyear>> oneyear >> twoyear >> threeyear >fiveyear;}}file.close();输出:ofstream file("InterestSettings.dat");if (file){file << alive << threemonth << halfyear<< oneyear << twoyear << threeyear << fiveyear;}file.close();上述代码中file.eof()表⽰⽂件到结尾。

⼀些验证流的状态的成员函数(所有都返回bool型返回值):bad()如果在读写过程中出错,返回 true 。

例如:当我们要对⼀个不是打开为写状态的⽂件进⾏写⼊时,或者我们要写⼊的设备没有剩余空间的时候。

fail()除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读⼊⼀个整数,⽽获得了⼀个字母的时候。

eof()如果读⽂件到达⽂件末尾,返回true。

good()这是最通⽤的:如果调⽤以上任何⼀个函数返回true 的话,此函数返回 false 。

要想重置以上成员函数所检查的状态标志,你可以使⽤成员函数clear(),没有参数。

C++中流的用法(ifstream,istringstream,istream)

C++中流的用法(ifstream,istringstream,istream)

1 关于C++中标准IO库中流的概念(istringstream,ifstream,istream等)istream,ostream用于控制窗口的输入输出,需要头文件#inclujde<iostream>ifstream,ofstream用于将文件转化为一个流对象(IO),实现向对控制台一样简单的输入输出,需要头文件#include<fstream>istringstream,ostringstream用于将一个字符串(其实是内存中的数据)转化为一个流对象,实现流的输入输出,需要头文件#include<sstream>以上代码在使用之前千万别忘了加上命名空间using namespace std;否则将会出现许多莫名其妙的错误For example:#include<iostream> //控制窗口流头文件#include<fstream> //文件流头文件#include<sstream> //内存流头文件#include<string>using namespace std;//命名空间不可或缺的一句//窗口输入输出流void win_io(istream &input){//parameter needs a win_streamstring line;cout << "请任意输入一些字符,按回车结束" << endl;getline(input,line);cout << "从控制窗口读取的内容为:" << line <<endl;}//文件输入输出流void file_io(){string file_name("./Smile.txt"); //文件名,当前目录下名为Smile的txt文件cout << "文件中的内容为:" << endl;ifstream in_file(file_name.c_str()); //将流与一个文件绑定,//file_name.c_str()是将string类型转化为c风格字符串,这是历史问题,不必过分追究string line;while(getline(in_file,line))cout << line << endl;}//将内存中的内容转化为流对象void buf_io(){string buf("hello world");istringstream sstr(buf);string word;while(sstr >> word)cout << word << endl; }。

c++ ifstream ofstream copy file

c++ ifstream ofstream copy file

c++ ifstream ofstream copy filec++的ifstream和ofstream是用于文件输入和输出的两个类。

它们可以用来打开文件,读取文件内容或将数据写入文件。

首先,我们需要包含<fstream>头文件来使用这两个类。

```cpp#include <fstream>```要从一个文件中读取内容,我们可以使用ifstream类的对象。

假设我们有一个名为"source.txt"的文本文件,我们可以使用ifstream对象打开它并读取文件内容。

```cpp#include <iostream>#include <fstream>int main() {std::ifstream inputFile("source.txt"); // 打开输入文件if (inputFile) { // 检查文件是否成功打开std::string line;while (std::getline(inputFile, line)) { // 逐行读取文件内容std::cout << line << std::endl; // 输出每一行内容 }inputFile.close(); // 关闭文件} else {std::cerr << "无法打开输入文件!" << std::endl;}return 0;}```上述代码将打开名为"source.txt"的文件,并逐行读取其中的内容并输出到控制台。

如果我们想将文件内容复制到另一个文件中,我们可以使用ofstream类的对象。

假设我们有一个名为"destination.txt"的目标文件,我们可以使用ofstream对象打开它并将数据写入文件。

```cpp#include <iostream>#include <fstream>int main() {std::ifstream inputFile("source.txt"); // 打开输入文件std::ofstream outputFile("destination.txt"); // 打开输出文件if (inputFile && outputFile) { // 检查文件是否成功打开std::string line;while (std::getline(inputFile, line)) { // 逐行读取输入文件内容outputFile << line << std::endl; // 将读取到的数据写入输出文件}inputFile.close(); // 关闭输入文件outputFile.close(); // 关闭输出文件} else {std::cerr << "无法打开输入/输出文件!" << std::endl; }return 0;}```上述代码将打开名为"source.txt"的输入文件和名为"destination.txt"的输出文件,并逐行将输入文件的内容写入输出文件。

C++基础系列——文件操作

C++基础系列——文件操作

C++基础系列——⽂件操作⼀、C++⽂件类及⽤法C++ 标准库提供了 3 个类⽤于实现⽂件操作,它们统称为⽂件流类,这 3 个类分别为:ifstream:专⽤于从⽂件读取数据ofstream:专⽤于向⽂件写⼊数据fstream:可读可写这三个⽂件流类都位于 fstream 头⽂件中fstream 类拥有 istream、ostream 类的全部成员⽅法。

fstream 头⽂件中并没有定义可直接使⽤的 fstream、ifstream 和 ofstream 类对象fstream 类常⽤成员⽅法成员⽅法名适⽤类对象功能open()fstream打开指定⽂件,使其与⽂件流对象关联is_open()ifstream检查指定⽂件是否已打开。

close()ofstream关闭⽂件,切断和⽂件流对象的关联。

swap()ofstream交换 2 个⽂件流对象。

operator>>(i)fstream重载 >> 运算符,⽤于从指定⽂件中读取数据。

gcount()(i)fstream返回上次从⽂件流提取出的字符个数。

该函数常和 get()、getline()、ignore()、 peek()、read()、readsome()、putback() 和 unget() 联⽤。

get()(i)fstream从⽂件流中读取⼀个字符,同时该字符会从输⼊流中消失。

getline(str,n,ch)(i)fstream从⽂件流中接收 n-1 个字符给 str 变量,当遇到指定 ch 字符时会停⽌读取,默认情况下 ch 为 '\0'。

ignore(n,ch)(i)fstream从⽂件流中逐个提取字符,但提取出的字符被忽略,不被使⽤,直⾄提取出 n 个字符,或者当前读取的字符为 ch。

peek()(i)fstream返回⽂件流中的第⼀个字符,但并不是提取该字符。

putback(c)(i)fstream将字符 c 置⼊⽂件流(缓冲区)。

ofstream ifstream 文件操作

ofstream ifstream 文件操作

ofstream ifstream 文件操作c++中输出和输入导屏幕和键盘的类别声明包含再标题文件<iostrream.h>中,而磁盘类文件的I/O则声明再包含标题文件<fstream.h>内。

输入和输出格式:输出到磁盘ofsteam 识别字(“文件名”)从磁盘读文件ifsteam 识别字("文件名“)例如:ofstream outfile("data.txt"); //写入到磁盘的data.txt中格式化输入输出:1 整数数据的输入输出整数数据存储再磁盘内,每个文字各占一个字节。

例如:#include <fstream.h>#include <iostream.h>#inlude <conio.h>void main(){ofstream outfile("data.txt"); //写入文件for(int i=0;i<10;i++)outfile<<i<<" "; //空格是为了避免数值连接在一起加上去的,此文件大小为20字节cout<<"ok,press a key!";gerch();}程序执行后用记事本打开可以看到数据0 1 2 3 4 5 6 7 8 9同样读取文件语句为:int data;ifstream infile("data.txt");for(int i=0;i<10;i++){infile>>data ; //读数据的时候因为数据间有一个空格才能完整的读出,cout<<data<<" "; //输出到屏幕,加上空格是为了分开数字}2 字符数据的输入字符的输出方式以put(ch)为存入语句,读取语句为get(ch)例如:char str[]="hello this is a c++ programe!\n""i know this difference \n""and mocive";ofstream outfile ("data.txt");for(int i=0;i<strlen(Str);i++)outfile.put(str[i]);读取:char ch;ifstream infile("data.txt");while(infile){infile.get(ch);cout<<ch;}getch();}3 字符串数据的输入数据多的时候读写速度比较快,输入时以整行字符串加上换行符号一次写入。

ofstream的使用方法

ofstream的使用方法

ofstream的使用方法ofstream的使用方法ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(<<)向流输出数据。

比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<’\n’;就表示把字符串"Write Stdout"和换行字符(’\n’)输出到标准输出流。

2、析取器(>>)从流中输入数据。

比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。

下面就把此类的文件操作过程一一道来。

一、打开文件在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int mode,int access);参数:filename:要打开的文件名mode:要打开文件的方式access:打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app:以追加的方式打开文件ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性ios::binary:以二进制方式打开文件,缺省的方式是文本方式。

两种方式的区别见前文ios::in:文件以输入方式打开(文件数据输入到内存)ios::out:文件以输出方式打开(内存数据输出到文件)ios::nocreate:不建立文件,所以文件不存在时打开失败ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败ios::trunc:如果文件存在,把文件长度设为0可以用“或”把以上属性连接起来,如ios::out|ios::binary打开文件的属性取值是:0:普通文件,打开访问1:只读文件2:隐含文件4:系统文件可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。

C++文件操作函数详解

C++文件操作函数详解

C++文件操作函数详解C++通过以下几个类支持文件的输入输出(1) ofstream:写操作,输出文件类;(2) ifstream:读操作,输入文件类;(3) fstream:可同时读写的文件类。

1. open函数:打开文件函数原型:void open(const char*filename,int mode,int access);参数说明:filename:要打开的文件名mode:要打开文件的方式access:打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app:以追加的方式打开文件ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性ios::binary:以二进制方式打开文件,缺省的方式是文本方式。

两种方式的区别见前文ios::in:文件以输入方式打开ios::out:文件以输出方式打开ios::nocreate:不建立文件,所以文件不存在时打开失败ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败ios::trunc:如果文件存在,把文件长度设为0可以用“或”把以上属性连接起来,如ios::out|ios::binary打开文件的属性取值是:0:普通文件,打开访问1:只读文件2:隐含文件4:系统文件例如:以二进制输入方式打开文件c:\config.sysfstreamfile1;file1.open("c:\\config.sys",ios::binary|ios::in,0);ofstream file;file.open ("example.bin", ios::out |ios::app | ios::binary);2. close函数函数原型:void close()3. 二进制文件(Binary files)在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++文件操作详解(ifstream、ofstream、fstream)C++ 通过以下几个类支持文件的输入输出:•ofstream: 写操作(输出)的文件类(由ostream引申而来)•ifstream: 读操作(输入)的文件类(由istream引申而来)•fstream: 可同时读写操作的文件类(由iostream引申而来)打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开一个文件。

被打开的文件在程序中由一个流对象(stream object)来表示(这些类的一个实例) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操作。

要通过一个流对象打开一个文件,我们使用它的成员函数open():void open (const char * , openmode mode);这里是一个字符串,代表要打开的文件名,mode 是以下标志符的一个组合:这些标识符可以被组合使用,中间以”或”操作符(|)间隔。

例如,如果我们想要以二进制方式打开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数open()来实现:ofstream file;("example.bin", ios::out | ios::app | ios::binary);ofstream, ifstream 和fstream所有这些类的成员函数open 都包含了一个默认打开文件的方式,这三个类的默认方式各不相同:只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。

如果函数被调用时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。

由于对类ofstream, ifstream 和fstream 的对象所进行的第一个操作通常都是打开文件,这些类都有一个构造函数可以直接调用open 函数,并拥有同样的参数。

这样,我们就可以通过以下方式进行与上面同样的定义对象和打开文件的操作:ofstream file ("example.bin", ios::out | ios::app | ios::binary); 两种打开文件的方式都是正确的。

你可以通过调用成员函数is_open()来检查一个文件是否已经被顺利的打开了:bool is_open();它返回一个布尔(bool)值,为真(true )代表文件已经被顺利打开,假( false )则相反。

关闭文件(Closing a file)当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。

关闭文件需要调用成员函数close(),它负责将缓存中的数据排放出来并关闭文件。

它的格式很简单:void close ();这个函数一旦被调用,原先的流对象(stream object)就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程(process)所有访问了。

为防止流对象被销毁时还联系着打开的文件,析构函数(destructor)将会自动调用关闭函数close 。

文本文件(Text mode files)类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的。

这就是为什么 fstream 的对象可以使用其父类的成员来访问数据。

一般来说,我们将使用这些类与同控制台(console)交互同样的成员函数(cin 和 cout)来进行输入输出。

如下面的例题所示,我们使用重载的插入操作符<<:// writing on a text file#include <fiostream.h>int main () {ofstream examplefile ("example.txt");if (example()) {examplefile << "This is a line.\n";examplefile << "This is anotherline.\n";example();}return 0;}This is a line. This is another line.从文件中读入数据也可以用与 cin 的使用同样的方法:// reading a text file#include <iostream.h>#include <fstream.h>#include <stdlib.h>int main () {char buffer[256]; ifstream examplefile ("example.txt");if (! example()){ cout << "Error opening file"; exit(1); }while (! example() ) {example (buffer,100);cout << buffer << endl;}return 0;}This is a line. This is another line.上面的例子读入一个文本文件的内容,然后将它打印到屏幕上。

注意我们使用了一个新的成员函数叫做eof ,它是ifstream 从类 ios 中继承过来的,当到达文件末尾时返回true 。

状态标志符的验证(Verification of state flags) 除了eof()以外,还有一些验证流的状态的成员函数(所有都返回bool 型返回值):• bad()如果在读写过程中出错,返回 true 。

例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。

• fail() 除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。

• eof()如果读文件到达文件末尾,返回true 。

• good()这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。

要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数。

获得和设置流指针(get and put stream pointers)所有输入/输出流对象(i/o streams objects)都有至少一个流指针:•ifstream,类似istream, 有一个被称为get pointer的指针,指向下一个将被读取的元素。

•ofstream, 类似ostream, 有一个指针put pointer ,指向写入下一个元素的位置。

•fstream, 类似iostream, 同时继承了get 和put我们可以通过使用以下成员函数来读出或配置这些指向流中读写位置的流指针:•tellg() 和tellp()这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get 流指针的位置(用tellg) 或put 流指针的位置(用tellp).•seekg() 和seekp()这对函数分别用来改变流指针get 和put的位置。

两个函数都被重载为两种不同的原型:seekg ( pos_type position );seekp ( pos_type position );使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。

要求传入的参数类型与函数tellg 和tellp 的返回值类型相同。

seekg ( off_type offset, seekdir direction );seekp ( off_type offset, seekdir direction );使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset)。

它可以是:流指针get 和put 的值对文本文件(text file)和二进制文件(binary file)的计算方法都是不同的,因为文本模式的文件中某些特殊字符可能被修改。

由于这个原因,建议对以文本文件模式打开的文件总是使用seekg 和seekp的第一种原型,而且不要对tellg 或tellp 的返回值进行修改。

对二进制文件,你可以任意使用这些函数,应该不会有任何意外的行为产生。

以下例子使用这些函数来获得一个二进制文件的大小:// obtainingsize of example.txt is 40 bytes.#include <iostream.h>#include <fstream.h>const char * = "example.txt";int main () {long l,m;ifstream file (, ios::in|ios::binary);l = ();(0, ios::end);m = ();();cout << "size of " << ;cout << " is " << (m-l) << " bytes.\n";return 0;}二进制文件(Binary files)在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

文件流包括两个为顺序读写数据特殊设计的成员函数:write 和read。

第一个函数(write) 是ostream 的一个成员函数,都是被ofstream所继承。

而read 是istream 的一个成员函数,被ifstream 所继承。

类fstream 的对象同时拥有这两个函数。

它们的原型是:write ( char * buffer, streamsize size );read ( char * buffer, streamsize size );这里buffer 是一块内存的地址,用来存储或读出数据。

参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。

The complete in a buffer // reading binary file#include <iostream>#include <fstream.h>const char * = "example.txt";int main () {char * buffer;long size;ifstream file (,ios::in|ios::binary|ios::ate);size = ();(0, ios::beg);buffer = new char [size];(buffer, size);();cout << "the complete in a buffer";delete[] buffer;return 0;}缓存和同步(Buffers and Synchronization)当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。

相关文档
最新文档