问题描述:
C 语言中什么是“句柄”?“文件”和“流”又有什么异同?
open() 和 fopen() 又有何区别?
解析:
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。
ASCII文旦拍歼件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。ASCII码文件可在模冲屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。
二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: *********** ***********只占二个字节。二进制文件虽然也可在屏幕上显示, 但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。
fopen函数用来打开一个文件进行读写的函数。打开由path指定的文件,返回文件的句柄
open()打开文件进行读写的函数。打开path指定的文件,根据access指定的模式值读写。
用读写文件就可以了,下面我写了个简单的读写:#include <stdio.h>int ch[256]FILE *input = fopen( "in.txt", "r" )//开一个用消老世来读的文件FILE *output = fopen("out.txt", "w")//开含森一个用来写的文件
while(fgets(input, 255, ch))//持续读文件{fprintf(output, "%s", ch)//把读到的东拿肢西写出来;}fclose(input)//关掉读的文件fclose(output)//关掉写的文件
可以,可读取其他文件可以使用二进制模式。让程序写入文件,首先应创建一个输出流ofstream流对象并与该文件关联,然后像使用cout一样使用该流对象,因为C++使用流来管理输入输出,当创建一个流对象时就为该对象分配一个缓冲区,创建两个流对象就分配两个缓冲区,标准的cout流是与显示屏相关联的,因此使用cout流将使内容输出到缓冲区,然后输出到显示屏上,而使用文件时就应该创建一个流以与要进行输入的文件相关联,这样当在给文件写入内容时,首先把内容写入到与文件关联的缓冲区中,然后再输出到文件中。具体步骤为:首先创建一个ofstream流对象,比如ofstream hy然后将该流对象与某文件关联起来,比如要使流对象hy与文件hyong.txt关联,则可以使用open函数,如hy.open(“hyong.txt”)或者使用构造函数将这两步合并为一步,比如ofstream hy(“hyong.txt”)其次向文件输入内容,像使用cout一样为文件输入内容,比如hy<神凳<”wweeiii”即表示把内容输出森困到与流对象hy相关联的控制台中,这里与hy相关联的控制台是文件hyong.txt,即把字符串wweeii输入到与流hy关联的文件hyong.txt中。以上面这两种方法打开文件时,如果没有这样的文件将创建一个新文件,如果有这样的文件,则打开该文件并清空其内容。
35、要读取文件中的内容,和上面介绍的把程序写入文件一样,首先应创建一个输入流ifstream流对象并与要执行的文件相关联,然后像使用cin一样使用该流对象,输入与输出一样都将创建流的缓冲区。具体方法为创建流对象如ifstream hy1然后将该流对象与要执行的文件相关联,可以使用open函数,比如hy1.open(“hyong1.txt”)或将两句合并为一句,比如ifstream hy1(“hyong1.txt”),然后像使用cin这样使用流对象,比如char ch[33]hy1>>ch即表示把hy1关联的文件hyong1.txt中的内容输出到数组ch中。
36、文件的读写 *** 作,要让文件能同时进行读和写应使用fstream类,使用该类的方法和上面介绍的一样,首先应创建一个流对象并与要执行的文件相关联,然后就像使用cin或cout一样使用该对象。对于fstream对象来说将创建读出和写入两个缓冲区。
36、读取或写入指定目录的文件:例如ofstream hyhy.open(“D:\\hhh\\hyong.txt”)即表示把数据写入到D盘目录下的hhh文件夹中的文件hyont.txt中。这里要注意目录此瞎念的路径表示要以\\双斜杠表示,因为在C++中第一个\斜杠表示的是转义字符。还要注意的是程序只会创建文件不会创建文件夹,也就是说在把数据写入到文件时,其文件夹应已经存在
37、当输入和输出流对象过期时(如程序终止),则到文件的连接将自动关闭。当然也可以使用close函数显示地关闭流对象到文件的连接。比如hy.close();hy1.close()删除该连接并不会删除流对象,只是把流对象和文件之间的关联解除了,删除连接后流对象仍然存在,以后还可以将该流对象重新连接到该文件或者另一个文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)