《C Prime Plus》第十三章总结

204 阅读3分钟

文件操作及标准I/O

写入和读取文件是非常基础的操作。C语言是接触底层的编程语言,所以提供了底层I/O和高级I/O。标准I/O的操作是建立在缓冲区这一个概念之上的,它极大地提高了数据传输的速度。

打开和关闭文件

C语言程序中,文件的打开和关闭实际上是创建和关闭一个存储了文件和缓冲区信息的结构(struct)。打开文件的函数是fopen(),关闭文件的函数是fclose(),它们的第一个参数都是一个字符串,这个字符串是文件名,第二个参数是使用模式(如读"r"、写"w"、添加"a"等)。并且,在很多模式中,如果这个文件名不存在,函数会自动创建一个这个文件名的文件。

在程序运行中,文件既然打开了,就要在不使用后关闭掉,有始有终。(类似于内存管理的创建和清除)

两种模式

C语言对文件的读取分为文本模式二进制模式。二进制模式使用较为广泛。

输入和输出

C语言程序把输入视为字节。输入方法以下几种:

  • fread():这个函数意味着C语言程序把输入看做二进制值并储存在指定位置。第一个参数是接收输入并储存信息的对象,一般为字符串;第二个参数和第三个参数用来指定读取内容的长度;第四个参数是读取的源文件。
  • fscanf():格式化输入的函数,与scanf类似。第一个参数是接收输入的对象,第二个参数是被双引号扣住的输入内容(也就是字符串内容),后面的参数就是前面字符串里的转换字符对应的来源。
  • getc()fgets():前面提到过,这里相对省略。 注意,fscanf()getc()fgets()都是把每个字节看做字符码,一个一个传输。getc()fgets()把输入作为字符码储存,而fscanf()是对内容进行葛淑华转换。

输出方法在理解难度上比输入要简单许多:

  • fwrite():与fread()类似,处理的是二进制值,将二进制数据直接放入输出流。参数与fread()类似,第一个参数是输出来源,第四个是输出目标。
  • fprintf():格式化输出函数。
  • fputs():以一个个字符码形式在缓冲区,然后输出。

操作文件时的定位

fseek()函数和ftell()函数用于在处理文件内容时的定位。

fseek()函数第一个参数是目标文件的指针,第二个参数是偏移量,这是一个long类型,偏移字符的数量,第三个参数是模式,确定从哪个位置开始进行偏移(开头往后偏移、当前位置往后偏移、结尾位置往前偏移)。

ftell()函数是寻找到当前文件的定位处,返回值是long类型,也就是当前位置相对于第三个参数(模式)的偏移量。