C语言 文件c语言操作问题

文件c语言代表一系列的字节函數 fopen()将一个文件c语言和一个流关联起来,并初始化一个类型为 FILE 的对象该对象包含了控制该流的所有信息。这些信息包括指向缓冲区的指针;文件c语言位置指示器它指定了获取文件c语言的位置;以及指示错误和文件c语言结尾情况的标志。

每个用于打开文件c语言的函数(吔就是 fopen()、freopen()和 tmpfile())都会返回一个指向 FILE 对象的指针该 FILE 对象包含与被打开文件c语言相关联的流。一旦打开了文件c语言就可以调用函数传递数据并对流进行处理。这些函数都把指向 FILE 对象的指针(通常称为 FILE 指针)作为它们的参数之一FILE 指针指定了正在进行操作的流。

I/O 链接库也包含了用于操作文件c语言系统的函数这些函数把文件c语言名作为它们的参数之一。使用这些函数不需要事先打开文件c语言它们包括:

(1) 函数 remove()删除一个文件c语言(或者空目录)。该字符串参数是文件c语言名如果文件c语言具有多个名称,那么 remove()只会删除所指定嘚名称而非删除文件c语言本身。该文件c语言数据还可以通过别的方式来获取但是不能通过已删除的文件c语言名访问。

(2) 函数 rename()改变一個文件c语言(或目录)的名称该函数的两个字符串参数依次为旧文件c语言名和新文件c语言名。函数 remove()和 rename()的返回值类型都是 int成功時都会返回 0,失败时都会返回非 0值下面的语句将 songs.dat 重命名为 mysong.dat:

 
导致函数 rename()失败的原因包括:使用旧文件c语言名的文件c语言不存在;程序獲取文件c语言的权限不够;或者文件c语言已经被打开。至于具体何种格式的文件c语言名才是合法的这是由实现版本决定。
无论是新文件c語言或已有文件c语言首先必须打开该文件c语言,才可以向文件c语言中写入数据或者修改其中的内容。打开一个文件c语言时必须指定訪问模式(access mode),以表明计划对该文件c语言进行的是读、写或读写结合等操作当使用完该文件c语言后,必须关闭它以释放资源
标准库提供函数 fopen()用以打开文件c语言(在特殊情况下,还可以使用函数 freopen()和 tmpfile()来打开文件c语言)
 
字符串 filename 向该函数传入所需打开的文件c语言嘚名称该文件c语言名字符串也可以包含目录信息,但必须保证字符串长度不得超过宏 FILENAME_MAX 中指定的最大长度函数的第二个参数 mode 也是一个字苻串,用来指定文件c语言访问模式 函数 freopen()会把文件c语言与一个新的流关联起来。
 
该函数将一个流重新定向与 fopen()类似,freopen()也会用指定的访问模式打开指定的文件c语言但不同的是, freopen()不会建立新的流而是将文件c语言与已有的流关联
,已有的流通过该函数的第三個参数指定之前与该流关联的文件c语言会被关闭。freopen()常被用来重新定向到标准流 stdin、stdout 和 stderr
 
函数 tmpfile()会建立一个新的临时文件c语言,其文件c语言名与所有已有文件c语言名都不一样然后打开该文件c语言,进行二进制数据的读写操作(类似于函数 fopen()采用“wb+”访问模式)如果该程序正常地结束,该文件c语言会被自动删除
所有三个打开文件c语言的函数 fopen()、freopen()和 tmpfile(),都会返回一个指针如果成功,该指針就指向已打开的流如果失败,该指针就为空指针 如果一个文件c语言打开用于写操作,程序应赋予其独立访问权限以防止其他程序同時对该文件c语言进行写操作传统的标准函数并不能确保独立文件c语言访问权限,但是 C11 新增的三个新“安全”函数 fopen_s()、freopen_s()和 tmpfile_s()在操作系统支持的前提下,可以提供独立访问权限
函数 fopen()和 freopen()的第二个参数指定了文件c语言的访问模式,访问模式决定了流所许可的輸入和输出操作对访问模式字符串的许可值有严格的限制。该字符串的第一个字符只能为三种形式:r(表示“read”)、w(表示“write”)或者 a(表示“append”)
 
在最简单情况下,该字符串只包含一个字符模式字符串还可以包含 + 和 b(如果两者同时具有,次序是没有关系的+b 效果等哃于 b+)。
模式字符串中的加号(+)表示读写操作都可以进行然而,程序不可以在读操作和写操作之间立即作切换在写操作之后,必须調用函数 fflush()或者定位函数(fseek()、fsetpos()或 rewind())然后才可以执行读操作。在读操作之后必须调用定位函数,然后才可以执行写操作
模式字符串中的 b 表示文件c语言以二进制模式打开。也就是说与该文件c语言关联的流是二进制流。如果模式字符串中没有 b新建立的流僦是字符串流。
当模式字符串以 r 开始时该文件c语言必须已经存在于文件c语言系统中。当模式字符串以 w 开始时如果文件c语言不存在,则會建立一个新文件c语言;如果文件c语言存在该文件c语言当前内容会被清除,因为在“write”模式中函数 fopen()将文件c语言长度设置为 0。
C11 新增┅个功能在操作系统支持的前提下,允许在独立写操作模式下打开文件c语言可以在以 w 起始的模式字符串中使用后缀 x,例如 wx 或 w+bx以指定獨立访问权限。如果文件c语言已经存在或者不能被创建则文件c语言打开函数执行失败(返回空指针)。否则将创建文件c语言并以独立訪问权限打开它。
当模式字符串以 a 开始时如果文件c语言不存在,则也会建立一个新文件c语言如果文件c语言存在,该文件c语言当前内容會被保留因为所有新写入的内容都会从文件c语言尾端添加。下面是一个简单的示例:
 fclose(fp); // 成功:关闭文件c语言没有错误需要处理
 
上例也展礻了如何利用函数 fclose()关闭一个文件c语言。
关闭文件c语言时需要使用函数 fclose()
 
 
该函数把缓冲区内存在的所有数据保存到文件c语言中关闭攵件c语言,释放所有用于该流输入输出缓冲区的内存 函数 fclose()返回 0 表示成功,返回 EOF 表示产生错误
当程序退出时,所有打开的文件c语言嘟会自动关闭尽管如此,还是应该在完成文件c语言处理后主动关闭文件c语言。否则一旦遇到非正常的程序终止,就可能会丢失数据而且,一个程序可以同时打开的文件c语言数量是有限的数量上限小于等于常量 FOPEN_MAX 的值。

我要回帖

更多关于 文件c语言 的文章

 

随机推荐