当前位置:文档之家› C++文件操作详解(ifstream、ofstream、fstream)

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

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

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

C++通过以下几个类支持文件的输入输岀:

ofstream: 写操作(输岀)的文件类 ifstream:

读操作(输入)的文件类

fstream: 可同时读写操作的文件类 打开

文件(Open a file )

对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来, 也就是说打开

一个文件。被打开的文件在程序中由一个流对象

(stream object )来表示(这些类的一个实例),

而对这个流对象所做的任何输入输岀操作实际就是对该文件所做的操作。

要通过一个流对象打开一个文件,我们使用它的成员函数 open ():

void ope n (const char * file name, ope nm ode mode );

这里file name 是一个字符串,代表要打开的文件名, mode 是以下标志符的一个组合:

ios::i n 为输入(读)而打开文件 ios::out 为输岀(写)而打开文件 ios::ate 初始位置:文件尾 ios::app 所有输岀附加在文件末尾 ios::tru nc 如果文件已存在则先删除该文件 ios::b inary

二进制方式

这些标识符可以被组合使用,中间以 ”或”操作符(|)间隔。例如,如果我们想要以二进制方式打

开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数

open ()来实现:

ofstream file;

file.ope n ("example.b in ”,ios::out | ios::app | ios::b in ary ); ofstream, ifstream 和fstream 所有这些类的成员函数 ope n 都包含了一个默认打开文件的方

式,这三个类的默认方式各不相同:

参数的默认方式

ofstream i os::out | ios::trunc ifstream i os::in

fstream ios::i n | ios::out

只有当函数被调用时没有声明方式参数的情况下,

默认值才会被采用。 如果函数被调用时声明了

任何参数,默认值将被完全改写,而不会与调用参数组合。

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

open 函数,并拥有同样的参数。这样,我们就可以通过以

下方式进行与上面同样的定义对象和打开文件的操作:

(由ostream 引申而来) (由istream 引申而来) (由iostream 引申而来)

ofstream file ("example.bi n", ios::out | ios::app | ios::b in ary);

两种打开文件的方式都是正确的。

你可以通过调用成员函数 is_ope n()来检查一个文件是否已经被顺利的打开了:

bool is_ope n();

它返回一个布尔(bool)值,为真(true )代表文件已经被顺利打开,假

(false )

则相反。

关闭文件(Closing a file)

当文件读写操作完成之后, 我们必须将文件关闭以使文件重新变为可访问的。 关闭文件需要调用

成员函数close(),它负责将缓存中的数据排放岀来并关闭文件。它的格式很简单:

void close ();

这个函数一旦被调用,原先的流对象 (stream object)

就可以被用来打开其它的文件了,这个文

件也就可以重新被其它的进程

(process)所有访问了。

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

close 。

文本文件 仃ext mode files) 类 ofstream, ifstream 禾口 fstream 是分别从 ostream, istream 禾口 iostream 中引申而来的

这就是为什么fstream

的对象可以使用其父类的成员来访问数据。

一般来说,我们将使用这些类与同控制台

(console)交互同样的成员函数(cin 和cout)来进行输

入输岀。如下面的例题所示,我们使用重载的插入操作符 <<: // writing on a text file #i nclude int mai n () {

ofstream examplefile ("example.txt"); if (examplefile.is_open()) { examplefile << "This is a lin e.\n"; examplefile << "This is ano ther lin e.\n";

examplefile.close(); }

return 0; }

从文件中读入数据也可以用与 cin 的使用同样的方法:

file example.txt This is a line. This is ano ther line.

// readi ng a text file #i nclude #in elude #i nclude int mai n () { char buffer[256];

ifstream examplefile ("example.txt"); if (! examplefile.is_ope n())

{ cout << "Error opening file"; exit (1); }

while (! examplefile.eof() ) { examplefile.getline (buffer,100); cout << buffer << en dl; } return 0; }

上面的例子读入一个文本文件的内容, 然后将它打印到屏幕上。 注意我们使用了一个新的成员函

数叫做eof ,它是ifstream 从类ios 中继承过来的,当到达文件末尾时返回

true 。

状态标志符的验证 (Verificati on of state flags)

除了 eof()以外,还有一些验证流的状态的成员函数(所有都返回 bool 型返回值):

*

bad()

如果在读写过程中岀错, 返回true 。例如:当我们要对一个不是打开为写状态的文件进行写入 时,或者我们要写入的设备没有剩余空间的时候。 *

fail()

除了与bad()同样的情况下会返回

true 以外,加上格式错误时也返回

true ,例如当想要读入 一个整数,而获得了一个字母的时候。 *

eof()

如果读文件到达文件末尾,返回 true 。

*

good()

这是最通用的:如果调用以上任何一个函数返回

true

的话,此函数返回 false 。

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

获得和设置流指针 (get and put stream poin ters) 所有输入/输岀流对象(i/o streams objects)

都有至少一个流指针:

This is a line. This is ano ther line.

有一个被称为get pointer 的指针,指向下一个将被读取的 有一

个指针put poin ter ,指向写入下一个元素的位置。

同时继承了 get 和put

我们可以通过使用以下成员函数来读出或配置这些指向流中读写位置的流指针:

tellg() 和 tellp()

这两个成员函数不用传入参数, 返回pos_type 类型的值(根据ANSI-C++标准),就是一个整数, 代表当前get 流指针的位置(用tellg) 或put 流指针的位置(用tellp).

seekg() 和口 seekp()

这对函数分别用来改变流指针 get 和put 的位置。两个函数都被重载为两种不同的原型:

seekg ( pos_type positi on ); seekp ( pos_type positi on );

使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。 要求传入的参数类型与函

数tellg 和tellp

的返回值类型相同。

seekg ( off_type offset, seekdir directi on ); seekp ( off_type offset, seekdir directi on ); 使用这个原型可以指定由参数 directi on

决定的一个具体的指针开始计算的一个位移

(offset)

它可以是:

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

由于这个原因,建议对以文本文件模式

打开的文件总是使用 seekg 和seekp 的第一种原型,而且不要对

tellg 或tellp 的返回值进

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

以下例子使用这些函数来获得一个二进制文件的大小:

// obta ining file size size of example.txt is 40 bytes.

#i nclude #in clude

const char * file name = "example.txt"; int mai n () {

long l,m;

ifstream file (file name,

ifstream ,类彳以 istream,

元素。

ofstream, 类似 ostream, fstream, 类彳以 iostream,

ios::i n|ios::bi nary);

l = file.tellg();

file.seekg (0, ios::e nd);

m = file.tellg();

file.close();

cout << "size of " << file name;

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 )中读岀或写入的字符数。

// readi ng bi nary file The complete file is in a buffer

#in clude

#in clude

const char * file name = "example.txt";

int mai n () {

char * buffer;

long size;

ifstream file (file name, ios::i n|ios::bi nary|ios::ate);

size = file.tellg();

file.seekg (0, ios::beg); buffer = new char [size];

file.read (buffer, size); file.close();

cout << "the complete file is in a buffer";

delete[] buffer;

return 0;

缓存和同步(Buffers and Synchronization)

当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer) 联系在一起。这

个缓存(buffer )实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输

岀流,每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输岀流所对应的物理文件中的,而是首先被插入到该流的缓存( buffer )中。

当缓存被排放岀来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输岀流的

话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization) ,它会在以下任一情况下发生:

当文件被关闭时:在文件被关闭之前,所有还没有被完全写岀或读取的缓存都将被同

步。

当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。

控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush

和endl。

明确调用函数sync(): 调用成员函数sync()(无参数)可以引发立即同步。这个函数返

回一个int值,等于-1表示流没有联系的缓存或操作失败。

在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:config.sys

fstream file1;

file1.open("c:config.sys",ios::binary|ios::in,0);

如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:

file1.open("c:config.sys");v=>file1.open("c:config.sys",ios::in|ios::out,0);

另外,fstream还有和open() 一样的构造函数,对于上例,在定义的时侯就可以打开文件了:

fstream file1("c:config.sys");

特另U提出的是,fstream 有两个子类:ifstream(input file stream) 和ofstream(outpu file stream) ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。

ifstream file2("c:pdos.def");〃以输入方式打开文件

ofstream file3("c:x.123");〃以输出方式打开文件

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

C++文件操作详解(ifstream 、ofstream 、fstream ) C++通过以下几个类支持文件的输入输岀: ofstream: 写操作(输岀)的文件类 ifstream: 读操作(输入)的文件类 fstream: 可同时读写操作的文件类 打开 文件(Open a file ) 对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来, 也就是说打开 一个文件。被打开的文件在程序中由一个流对象 (stream object )来表示(这些类的一个实例), 而对这个流对象所做的任何输入输岀操作实际就是对该文件所做的操作。 要通过一个流对象打开一个文件,我们使用它的成员函数 open (): void ope n (const char * file name, ope nm ode mode ); 这里file name 是一个字符串,代表要打开的文件名, mode 是以下标志符的一个组合: ios::i n 为输入(读)而打开文件 ios::out 为输岀(写)而打开文件 ios::ate 初始位置:文件尾 ios::app 所有输岀附加在文件末尾 ios::tru nc 如果文件已存在则先删除该文件 ios::b inary 二进制方式 这些标识符可以被组合使用,中间以 ”或”操作符(|)间隔。例如,如果我们想要以二进制方式打 开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数 open ()来实现: ofstream file; file.ope n ("example.b in ”,ios::out | ios::app | ios::b in ary ); ofstream, ifstream 和fstream 所有这些类的成员函数 ope n 都包含了一个默认打开文件的方 式,这三个类的默认方式各不相同: 类 参数的默认方式 ofstream i os::out | ios::trunc ifstream i os::in fstream ios::i n | ios::out 只有当函数被调用时没有声明方式参数的情况下, 默认值才会被采用。 如果函数被调用时声明了 任何参数,默认值将被完全改写,而不会与调用参数组合。 由于对类ofstream, ifstream 和fstream 的对象所进行的第一个操作通常都是打开文件,这 些类都有一个构造函数可以直接调用 open 函数,并拥有同样的参数。这样,我们就可以通过以 下方式进行与上面同样的定义对象和打开文件的操作: (由ostream 引申而来) (由istream 引申而来) (由iostream 引申而来)

《文件操作》说课设计 .doc

《文件操作》说课设计 今天我说课的题目是《文件操作》,我准备从教学背景、教学目标、设计思路、教学过程这四个方面来阐述。 一、教学背景 1、教材分析 《文件操作》是江苏省小学信息技术教材第21课的内容。本课文是建立在掌握查找文件基础上的,对“画图”过程中保存的文件进行整理,删除多余、无用的文件,对好的作品进行备份,整理磁盘等操作,同时在操作中学会多选、复制、移动和删除文件,是一节实践性很强的课。这些文件操作技能是学生使用电脑所应具备的基本能力,因此,本课在学生学习信息技术的过程中起着极其重要的作用。 2、教学对象分析 在学习此课之前,学生已经认识了文件夹、文件的类型,会对文件进行一些简单操作如单选文件、查找文件等,在画图中也熟练地掌握了菜单命令的使用,这些都为学习这节课奠定了基础。有个别学生对电脑的操作比较熟练,在课上总能较快地掌握所学的知识,将这些学生分散到各个小组,为小组互助提供了可能。 3、教学环境分析 学生机中预先复制本课所需的文件和文件夹,教师机发布“文件操作自助学习软件”,软件中提供了一些文件操作的动态演示画面,不是每个学生都需要,仅给部分学生提供参考和帮助。 二、教学目标 基于以上分析和新课标的要求,本人将这节课的教学目标定位为: 知识目标:学会选定、复制、移动、删除文件的方法;理解复制文件和移动文件的区别;初步认识回收站。 能力目标:初步培养学生自主探究的能力和迁移、类推的能力;培养学生通过合作共同解决问题的能力。 情感目标:让学生结合自己的情况,对多样化的操作进行选择,使不同个性的学生在完成任务的同时获得成功的情感体验;培养学生良好的信息处理习惯和尊重他人劳动成果的道德品质。 教学重点:文件操作技能的掌握。 教学难点:理解并掌握“移动文件”、“复制文件”的操作技能,形成一套有效的记忆方法。 因为课堂教学是动态开放的过程,随着课堂教学的深入,在师与生、生与生、师生与文本对话的过程中,会产生许多新的教学资源,我将考思将其作为本堂课即定目标的拓展。如某些学生会使用拉框的方式选定多个文件等书本没有介绍的方法,我将其定位为本课的生成性目标之一。 三、设计思路 1、主动任务驱动法的应用。 任务驱动法在信息技术教学中是最为广大师生所理解、接受和使用的一种教学方法,但任务驱动教学法也存在着各种缺陷和不足,在本堂课中,我一改以往教师提出任务的做法,通过创设情境,激发学生的兴趣,学生在同伴与老师的协助下,共同提出任务,在发现问题—提出问题—分析问题——解决问题的过程中得到清晰的思路、方法以及知识的脉络,既培

C FSTREAM文件操作详细说明

fstream文件操作详细说明 目录 一、打开文件 (2) 二、关闭文件 (3) 三、读写文件 (3) 1、文本文件的读写 (3) 2、二进制文件的读写 (4) 四、检测EOF (5) 五、文件定位 (5)

fstream文件操作详细说明 在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:系统文件 可以用“或”或者“+”把以上属性连接起来,如:1|2就是以只读和隐含属性打开文件。 例如:以二进制输入方式打开文件c:\config.sys

C语言程序中关于文件的操作

文件操作函数C语言(FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct{ int level;/*fill/empty level of buffer*/ unsigned flags;/*File status flags*/ char fd;/*File descriptor*/ unsigned char hold;/*Ungetc char if no buffer*/ int bsize;/*Buffer size*/ unsigned char_FAR*buffer;/*Data transfer buffer*/ unsigned char_FAR*curp;/*Current active pointer*/ unsigned istemp;/*Temporary file indicator*/ short token;/*Used for validity checking*/ }FILE;/*This is the FILE object*/ FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能 fopen()打开流 fclose()关闭流 fputc()写一个字符到流中 fgetc()从流中读一个字符 fseek()在流中定位到指定的字符 fputs()写字符串到流 fgets()从流中读一行或指定个字符 fprintf()按格式输出到流 fscanf()从流中按格式读取 feof()到达文件尾时返回真值 ferror()发生错误时返回其值 rewind()复位文件定位器到文件开始处 remove()删除文件 fread()从流中读指定个数的字符 fwrite()向流中写指定个数的字符 tmpfile()生成一个临时文件流 tmpnam()生成一个唯一的文件名 下面就介绍一下这些函数 1.fopen() fopen的原型是:FILE*fopen(const char*filename,const char*mode),fopen实现三个功

fstream_h

fstream.h #if _MSC_VER > 1000 #pragma once #endif #ifdef __cplusplus #ifndef _INC_FSTREAM #define _INC_FSTREAM #if !defined(_WIN32) && !defined(_MAC) #error ERROR: Only Mac or Win32 targets supported! #endif #ifdef _MSC_VER // Currently, all MS C compilers for Win32 platforms default to 8 byte alignment. #pragma pack(push,8) #include #endif // _MSC_VER /* Define _CRTIMP */ #ifndef _CRTIMP #ifdef _DLL #define _CRTIMP __declspec(dllimport) #else /* ndef _DLL */ #define _CRTIMP #endif /* _DLL */ #endif /* _CRTIMP */ #include #ifdef _MSC_VER // C4514: "unreferenced inline function has been removed" #pragma warning(disable:4514) // disable C4514 warning // #pragma warning(default:4514) // use this to reenable, if desired #endif // _MSC_VER typedef int filedesc; class _CRTIMP filebuf : public streambuf { public: static const int openprot; // default share/prot mode for open // optional share values for 3rd argument (prot) of open or constructor static const int sh_none; // exclusive mode no sharing static const int sh_read; // allow read sharing static const int sh_write; // allow write sharing // use (sh_read | sh_write) to allow both read and write sharing options for setmode member function static const int binary; static const int text; filebuf(); filebuf(filedesc);

文件File操作

11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择。因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本能力。本章IO类的使用就从读写文件开始。 11.3.1 文件操作 文件(File)是最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件、声音文件等数据文件,也经常需要根据需要从指定的文件中进行数据的读取。当然,在实际使用时,文件都包含一个的格式,这个格式需要程序员根据需要进行设计,读取已有的文件时也需要熟悉对应的文件格式,才能把数据从文件中正确的读取出来。 文件的存储介质有很多,例如硬盘、光盘和U盘等,由于IO类设计时,从数据源转换为流对象的操作由API实现了,所以存储介质的不同对于程序员来说是透明的,和实际编写代码无关。 11.3.1.1 文件的概念 文件是计算机中一种基本的数据存储形式,在实际存储数据时,如果对于数据的读写速度要求不是很高,存储的数据量不是很大时,使用文件作为一种持久数据存储的方式是比较好的选择。 存储在文件内部的数据和内存中的数据不同,存储在文件中的数据是一种“持久存储”,也就是当程序退出或计算机关机以后,数据还是存在的,而内存内部的数据在程序退出或计算机关机以后,数据就丢失了。 在不同的存储介质中,文件中的数据都是以一定的顺序依次存储起来,在实际读取时由硬件以及操作系统完成对于数据的控制,保证程序读取到的数据和存储的顺序保持一致。 每个文件以一个文件路径和文件名称进行表示,在需要访问该文件的时,只需要知道该文件的路径以及文件的全名即可。在不同的操作系统环境下,文件路径的表示形式是不一样的,例如在Windows操作系统中一般的表示形式为

C++文件操作详细解

C++文件操作详解(ifstream、ofstream、fstream)C++ 通过以下几个类支持文件的输入输出:

你可以通过调用成员函数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 int main () { ofstream examplefile ("example.txt"); if (examplefile.is_open()) { examplefile << "This is a line.\n"; examplefile << "This is another line.\n"; examplefile.close(); } return 0; file example.txt This is a line. This is another line.

fstream用法

ofstream/ifstream 文本/二进制方式读入/写出数据方法 文件I/O 在C++中比烤蛋糕简单多了。在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。 一、ASCII 输出 为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O 操作。如果你猜是"fstream," 恭喜你答对了!但这篇文章介绍的方法,我们分别使用"ifstream"?和"ofstream" 来作输入输出。 如果你用过标准控制台流"cin"?和"cout," 那现在的事情对你来说很简单。我们现在开始讲输出部分,首先声明一个类对象。ofstream fout; 这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。 fout.open("output.txt"); 你也可以把文件名作为构造参数来打开一个文件. ofstream fout("output.txt"); 这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。对不了解控制台输出"cout"的人, 这里有个例子。 int num = 150; char name[] = "John Doe"; fout << "Here is a number: " << num << "\n"; fout << "Now here is a string: " << name << "\n"; 现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它会自动保存文件。回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样:

VB文件操作

VB文件操作(一) 2009年12月01日星期二 12:28 在程序设计中,文件是十分有用和不可缺少的。由应用程序产生或处理过的数据,往往在应用程序结束以前仍需保留,或者为了存取方便,提高上机效率,需要将由输入设备输入的数据保存在存储介质上(如磁盘,磁带等)。这些数据是以文件的方式保存在存储介质上的,需要读取数据时可以从外存储器调出,需要保存时可以由内存写到外存。在程序中可直接对文件进行处理,可以保存、访问它所处理的数据,也可以使其它程序共享这些数据。 VB具有强大的文件处理能力,可以处理顺序文件、随即文件和二进制文件,同时提供了与文件处理有关的控件,也提供了大量与文件管理有关的语句、函数。本章介绍文件的结构、三种文件类型、VB对文件和目录维护的主要语句和函数、VB程序对文件的操作方法(文件系统对象)。 6.1 文件 在VB程序中,需要输入少量数据,可通过程序中直接赋值来完成,或通过输入函数以获取数据(如使用函数InputBox),但输入大量的数据时,这些方法易造成数据输入和数据存储不方便,在重复输入相同的数据时,易造成数据不一致。鉴于这种情况,可以将这些大量的数据存储在一个或多个文件中,使用时再从相应的文件中读取。 通常情况下,计算机处理的大量数据都是以文件的形式存放在外部介质(如磁盘)上,操作系统也是以文件为单位对数据进行管理。当访问外部介质上存储的数据时,先按文件名找到所需要的文件,再从该文件中读取相关数据;在外部介质中存入数据时,也必须先建立一个文件,才能向它写入数据。 在介绍文件结构和类型之前,简单介绍对文件命名的基本规则。在Visual Basic 中,文件说明的一般格式为: 设备名:文件引用名 例如: D:myfile.abc 这里的“D:”是设备名,而"myfile.abc”是文件引用名。 设备名是存放文件的设备的名称,如磁盘、磁带、打印机等。在微机中,存放文件的主要设备是磁盘,其名称通常为A:,B:,C:,D:等,分别代表A,B,C,D等驱动器。 在DOS环境下,文件引用名由两部分组成,即文件基本名和扩展名。其中文件基本名常以字母开头,最多不超过8个字符;扩展名是可选的,最多不超过3个字符;在文件基名和扩展名之间有一个圆点。通常把这种文件名称为“8.3”格式。如上例中的“myfile.abc” 在Windows中可以使用长文件名,其长度最多不超过255个字符,并能自动维护传统的“8.3”格式的文件名。 下列字符可用做文件基本名和扩展名: (1)英文字母:a~z、A~Z (2)数字:0~9 (3)特殊字符:$ # & @ ! % ( ) _ - | ,^ ~ / Visual Basic窗体文件的扩展名为.frm,工程文件的扩展名为.vbp,标准模块文件的扩展名为.bas,可执行文件的扩展名为.exe,等等。用户可使用自己的扩展名,但不要与系统使用的扩展名相矛盾。 完整的文件说明由设备名和文件引用名构成。对于磁盘文件来说,还可以含有

C#中的文件读写操作详解

C#中的文件读写操作详解(摘自互动维客:https://www.doczj.com/doc/0b14449753.html,,更多内容 请访问互动维客!) C#中的文件操作详解 微软的.Net框架为我们提供了基于流的I/O操作方式,这样就大大简化了开发者的工作。因为我们可以对一系列的通用对象进行操作,而不必关心该I/O操作是和本机的文件有关还是和网络中的数据有关。.Net框架主要为我们提供了一个System.IO命名空间,该命名空间基本包含了所有和I/O操作相关的类。 本文将向大家介绍一些基本的文件操作方法,包括对文件系统中的目录和文件的操作,还有就是文件的读写操作等。通过运用System.IO.DirectoryInfo类和System.IO.FileInfo类我们可以轻易的完成与目录和文件相关的操作,而通过运用System.IO.StreamReader类和System.IO.StreamWriter类我们可以方便的完成与文件的读写相关的操作。 命名空间概览 下面的表格显示了System.IO命名空间中最重要的一些类,通过运用这些类我们就能完成基本的文件操作。 表1 类名功能和用途 BinaryReader、BinaryWriter 读写二进制数据 Directory、File、DirectoryInfo以及FileInfo 创建、删除并移动目录和文件,通过属性获取特定目录和文件的相关信息 FileStream 以随机方式访问文件 MemoryStream 访问存储在内存中的数据 StreamReader 、StreamWriter 读写文本数据信息 StringReader、StringWriter 运用字符串缓冲读写文本数据信息 运用DirectoryInfo类和FileInfo类 DirectoryInfo类和FileInfo类的基类都是FileSystemInfo类,这个类是一个抽象类,也就是说你不可以实例化该类,只能通过继承产生其子类并实例化其子类。然而你却可以运用由该类定义的各种属性,下面的表格显示了该类已经定义了的各种属性。 表2 属性功能和用途

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:\config.sys fstream file1; file1.open("c:\\config.sys",ios::binary|ios::in,0); 如果open函数只有文件名一个参数,则是以读/写普通文件打开,即: file1.open("c:\\config.sys"); <=> file1.open("c:\\config.sys",ios::in|ios::out,0); 另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:

文件和文件夹的操作题

文件和文件夹的操作题 一、文件夹的创建:创建文件或文件夹,要先选好驱动器,如D:、C:(1)请在“我的文档”下新建以下文件夹和文件。 二、重命名文件和文件夹。 (2 )用双击的方法把“班级”这个文件夹改成“期中考试”。 (3)用右击的方法把以自己名字命名的文件夹改为“排版”。 (4)在“期中考试”下再新建一个文件夹,用“文件”―“重命名”改为“打字”。除了这三种之外,还有其他方法吗?_________________________________. 注:右击+M键 三、制、移动文件及文件夹 (5)把文件夹设置成web风格 (6)用“剪切”---“粘贴”把“期中考试”移到桌面上。 (7)用“复制”---“粘贴”把“排版”移到桌面上。 注:比较一下这两种方法有什么不同?_______________________________. (8)用拖动的方法把“打字”文件移到桌面上。 同时操作多个文件夹和文件时: (9)把word1、word3、word5复制到桌面上,(按住Ctrl,选中时) (10)把word1、word2、word3复制到“打字”文件夹下(选中时,按住shift)(11)用鼠标在文件的外围单击并拖动选中所有的文件(word1-word5)。 (12)用“编辑”菜单中的“全选”选定所有的文件。 (13)用“编辑”菜单中的“反向选定”选中除了word3之外的所有文件。 四、查找文件和文件夹 (14)在打字下建5个文本文件wword1、woord2、wwwrd3、wworrd4、wordd5。(15)把打字文件夹中的文件自动排列。 (16)查找以 wordd5命名的这个文件 (17)查找以w*d*命名的文件 (18)查找以w??rd?命名的文件并比较查找到的结果 五、创建快捷方式 (19)把word这个应用程序设置成桌面快捷方式。 (20)用桌面上右击的方法在桌面上创建word2的快捷方式。 (21)设置word2的快捷键为Ctrl+Alt+A (22)把期中考试这个文件夹拖放到“开始”菜单中,设置成开始菜单的快捷方式。

用户配置文件操作详解

用户配置文件操作详解 系统崩溃了怎么办?重装系统!但每次重装系统时大家是否始终感觉新装系统的电脑操作不方便呢?例如进论坛要重新输入帐号密码,桌面背景也不是自己喜欢的图案,以前收藏的网页也不知所踪……其实面对这些问题,我们只要备份了用户配置文件,我们所有的个性化设置都能在系统重装后轻松恢复过来。 Windows 2000/XP/2003等操作系统都提供了非常完善的用户管理机制,每个登陆计算的账户都会有独立的文件夹用于保存该登陆账号的个性化信息,这种独立分开的方式也为我们备份和保护个人数据提供了可能。 1.找到个人数据的家 在了解如何备份个人数据之前我们首先要了解用户配置文件到底是如何工作的,只有了解了它的工作原理我们才能实现个人数据的轻松、快速备份。 当我们的操作系统(Windows 2000/XP/2003)安装完成后,在首次登录的时候操作系统会为当前登录的帐号建立一个用户配置文件夹,默认这个文件夹会位于“C:\Documents and Settings”下,我们可以选择“开始”-“运行”,输入“%SystemDrive%\Documents and Settings”即可打开该文件夹。这个文件夹默认会使用当前登录的用户名作为名字,但是如果在“Documents and Settings”文件夹中存在与当前登录用户名相同的文件夹,系统就会修改这个文件夹的名字以避免重复。例如,当前登录的用户名为ABC,默认系统会在第一次登陆的时候建立ABC文件夹,但是如果ABC文件夹存在则会尝试将名字改为“ABC.计算机名”,如果“ABC.计算机名”也存在,Windows则会尝试将文件夹命名为“ABC.计算机名.000”,如果仍然存在这样命名的文件夹则系统就会尝试“ABC.计算机名.001”、“ABC.计算机名.002”等。 2.挽救丢失的个人数据 有了上边的介绍的原理,接下来我们再尝试恢复丢失的用户数据就不再是一件非常困难的事情了,首先我们来解决开机后桌面背景、快捷方式和我的文档中数据统统丢失的问题。 Step 1 如果你只是想找回原来配置文件中的一些数据可以进入“Documents and Settings”文件夹,然后按照时间排序,你将可以看到多个以你当前用户名开头的文件夹,选择时间相对较久的那个并尝试双击进入,如果提示拒绝访问则可以注销计算机使用“administrator”帐号登录,登录后重新找到这个文件夹并在上边单击鼠标右键,选择“属性”-“安全”(如果找不到“安全”标签,可以选择“工具”-“文件夹选项”,取消使用简单文件共享前边的勾选),然后单击里边的“高级”按钮,在弹出的窗口中选择“所有者”,在里边选中“administrator”并勾选中下边的“替换子容器及对象的所有者”,如图1所示。设置完成后单击“应用”按钮。

VBA文件及文件夹操作

VBA文件及文件夹操作 1.VBA操作文件及文件夹 on error resume next下测试 A,在D:\下新建文件夹,命名为folder 方法1:MkDir "D:\folder" 方法2:Set abc = CreateObject("Scripting.FileSystemObject") abc.CreateFolder ("D:\folder") B,新建2个文件命名为a.xls和b.xls Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:\folder\a.xls" ActiveWorkbook.SaveAs Filename:="D:\folder\b.xls" C,创建新文件夹folder1并把a.xls复制到新文件夹重新命名为c.xls MkDir "D:\folder1" FileCopy "D:\folder\a.xls", "D:\folder1\c.xls" D,复制folder中所有文件到folder1 Set qqq = CreateObject("Scripting.FileSystemObject") qqq.CopyFolder "D:\folder", "D:\folder1" D,重命名a.xls为d.xls name "d:\folder1\a.xls" as "d:\folder1\d.xls" E,判断文件及文件夹是否存在 Set yyy = CreateObject("Scripting.FileSystemObject")

If yyy.FolderExists("D:\folder1) = True Then ... If yyy.FileExists("D:\folder1\d.xls) = True Then ... F,打开folder1中所有文件 Set rrr = CreateObject("Scripting.FileSystemObject") Set r = rrr.GetFolder("d:\folder1") For Each i In r.Files Workbooks.Open Filename:=("d:\folder1\" + https://www.doczj.com/doc/0b14449753.html, + "") Next G,删除文件c.xls kill "d:\folder1\c.xls" H,删除文件夹folder Set aaa = CreateObject("Scripting.FileSystemObject") aaa.DeleteFolder "d:\folder" 2.8excel vba一次性获取文件夹下的所有文件名的方法 小生今天上网下载了一个财务常用报表的文件包,里面有几百个excel工作表,要是手工一个一个的获得文件名的话,那我可是要忙十天半月哦。于是想到昨论坛就是vba论坛,昨不充分利用excel 自身的高级应用呀,呵呵,实现的代码如下,把工作量几天的任务可是一下子就完成了,这就是excel vba 给你工作提高效率的结果! excle vba自动获取同一文件夹下所有工作表的名称红色代码: 按Alt+F11,打开VBA编辑器,插入一个模块,把下面的代码贴进去,按F5执行 Sub t() Dim s As FileSearch '定义一个文件搜索对象

ofstream和ifstream详细用法

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:\config.sys fstream file1? file1.open("c:\\config.sys",ios::binary|ios::in,0)?

net文件操作

.NET中处理文件和文件夹的操作 首先要熟悉.NET中处理文件和文件夹的操作。File类和Directory类是其中最主要的两个类。了解它们将对后面功能的实现提供很大的便利。 本节先对和文件系统相关的两个.NET类进行简要介绍。 System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间。下面通过程序实例来介绍其主要属性和方法。 (1) 文件打开方法:File.Open () 该方法的声明如下: public static FileStream Open(string path,FileMode mode) 下面的代码打开存放在c:\tempuploads目录下名称为newFile.txt文件,并在该文件中写入hello。 private void OpenFile() { FileStream.TextFile=File.Open(@"c:\tempuploads\newFile.txt",FileMode.Append); byte [] Info = {(byte)'h',(byte)'e',(byte)'l',(byte)'l',(byte)'o'}; TextFile.Write(Info,0,Info.Length); TextFile.Close(); } (2) 文件创建方法:File.Create() 该方法的声明如下: public static FileStream Create(string path;) 下面的代码演示如何在c:\tempuploads下创建名为newFile.txt的文件。 由于File.Create方法默认向所有用户授予对新文件的完全读/写访问权限,所以文件是用读/写访问权限打开的,必须关闭后才能由其他应用程序打开。为此,所以需要使用FileStream类的Close方法将所创建的文件关闭。 private void MakeFile() { FileStream NewText=File.Create(@"c:\tempuploads\newFile.txt"); NewText.Close(); } (3) 文件删除方法:File.Delete()

Word的基本操作详解

第五章中文Word2000 第一节使用入门 一、启动Word2000中文版 方法1 [开始][程序][Microsoft Word] 方法2 用鼠标单击“开始”按钮,在打开“开始”菜单后,选择“新建Office文档”或“打开Office文档”(如果我们的计算机上已存有Word文档的话)并单击之。 方法3 如果“Office快捷工具栏”显示在屏幕上,用鼠标单击“Microsoft Word”图标按钮即可启动中文Word2000。 方法4 在桌面上制作一个中文Word2000的快捷键,以后只要用鼠标的左键双击此快捷键,就可以启动中文Word2000。 方法5 在“我的电脑”或“资源管理器”中,双击扩展名为.DOC 的文档。 二、Word2000工作环境 1、W ord2000应用程序窗口的组成 标题栏、菜单栏、工具栏和状态栏。 工具栏的显示与隐藏:[视图][工具栏],再在级联菜单中,选中要显示的工具栏或取消要隐藏的工具栏即可。 2、W ord2000文档窗口 标题栏、菜单栏、工具栏、标尺、水平、垂直滚动条,状态栏、工作区。 注意:

●在Word2000中的滚动条与常用窗口滚动条的区别。在垂直滚动条中多三个按钮,“选择浏览对象”按钮。在水平滚动条左边有“视图”按钮。 ●文字插入点标志、文件结束标志、段落结束标志: 3、使用菜单和对话框。:快捷菜单 4、帮助功能 1)Office 助手 2)[帮助][目录和索引] 3)屏幕提示:[帮助][这是什么?] 三、创建文档的操作步骤 1.新建文档 2.文字录入:包括文字、符号、图片、公式和艺术字等。要注意的 是:当用户输入文件达到行末时,WORD能自动移到下一行,称为自动换行,而不必按回车键,除非用户想开始新的一段或增加一空行。 3.编辑:用户可在WORD的帮助下进行插入、删除、修改、复制、移 动等操作。(剪贴板) 4.文件格式设置及排版:通过格式设置可以控制文件的外观显示。 例如设置黑体、斜体、下划线、使正文居中、左排等等。在文件中,还可以添加所需的图画与表格,从而将文件修饰得更加美观。 (工具按钮)

相关主题
文本预览
相关文档 最新文档