C语言——文件操作集合(格式化写文件、将文件内容读到buff、文件文件夹存在否、fopen和open区别等)

本文详细介绍了C语言中的文件操作,包括缓冲文件系统与非缓冲文件系统的区别。在缓冲文件系统中,讲解了打开、读取(如fread、fscanf)、写入(如fprintf、fwrite)及文件位置操作(如fseek、rewind)等功能。在非缓冲文件系统部分,提到了read和write函数,并讨论了它们在不同情况下的行为。此外,还涉及了文件和文件夹存在的判断方法,如access函数和dirent.h头文件中的文件夹操作函数。
摘要由CSDN通过智能技术生成

目录

缓冲文件系统

非缓冲文件系统

缓冲文件系统

1.打开文件

2.读文件

fgetc ()(一次只读一个字符)

字符串读取函数fgets()      

fread()

fscanf()函数 

    实现一个函数 file_read:把文件所有内容读到一个buf里

3.写文件

fputc()函数(一次写一个字符)

fputs()函数

fwrite()函数

fprintf()函数

   1. 实现一个函数 file_write_format:格式化写文件

   2. 实现一个函数 file_write_buff:读将buf数据写入文件里

4.关闭文件

5.fseek():定位到流中指定的位置

6.rewind()  :从当前位置回到文件开始位置

7. ftell() 返回给定流 stream 的当前文件位置

8.判断文件、文件夹是否存在

    1.access函数

 2.#include   dirent.h 文件夹操作函数。GCC,非ANSI C。

非缓冲文件系统

read()

read()函数返回值研究

write()



还待完善.............

非缓冲IO操作数据流向路径:数据->内核缓冲区->磁盘
带缓冲IO操作数据流向路径:数据->流缓冲区->内核缓冲区->磁盘
无缓存只不过是指在用户层没有缓存,但对于内核来说,还是进行了缓存

(以下百度)

1.非缓冲文件系统(open)

非缓冲文件系统依赖于操作系统(系统函数),通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。函数包括open, close, read, write, fcntl, getc, getchar, putc, putchar等。

2.缓冲文件系统(fopen)

缓冲文件系统是借助文件结构体指针来对文件进行管理(库函数),通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数据。缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。函数包括fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind

缓冲文件系统

fopen() 打开流 fclose() 关闭流  fgetc() 从流中读一个字符 fgets() 从流中读一行或指定个字符(字符串) fscanf() 从流中按格式读取  fread() 从流中读指定个数的字符  fputc()  写一个字符到流中 fputs() 写字符串到流 fprintf() 按格式输出到流 fwrite()  向流中写指定个数的字符 fseek()  在流中定位到指定的字符 rewind()  复位文件定位器到文件开始处   ftell()  返回给定流 stream 的当前文件位置

非缓冲文件系统

open()  打开一个文件并返回它的句柄 close() 关闭一个句柄  lseek() 定位到文件的指定位置  read()  块读文件  write() 块写文件 eof()  测试文件是否结束  filelength() 取得文件长度  rename() 重命名文件

缓冲文件系统

fopen()   fclose()   fputc()一个字符到流中  fputs()字符串到流 fprintf() 格式输出到流  fwrite()  向流中写 指定个数的字符 fgetc()  从流中读 一个字符  fgets()  从流中读一行或指定个字符  fscanf() 从流中按 格式读取  fread()  从流中读 指定个数的字符  fseek() 在流中定位到 指定位置的字符 rewind() 复位文件定位器到文件开始处 fsteel() 返回给定流 stream 的当前文件位置

 

缓冲文件系统
函数名称 功能 返回值说明 注意

fopen()   

FILE *fopen(char *filename, char *mode);

打开文件    

fclose()

int fclose(FILE *fp);

关闭文件    

fputc() 

int fputc(int c, FILE *stream);

一个字符到流中     

fputs()

int fputs(const char *s, FILE *stream);

字符串到流     

fprintf()

int fprintf(FILE *stream, const char *format, ...);

格式输出到流     

fwrite() 

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

向流中写指定个数的字符  返回实际写入的数据项个数count。

 

  • ptr-- 写入的元素数组的指针。

  • size-- 写入的每个元素的大小,以字节为单位

  • nmemb-- 这是元素的个数,每个元素的大小为 size 字节。

  • stream-- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流

总共写入 : size * numemb 个字节

fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步

fgetc() 

int fgetc(FILE *stream);

 从流中读一个字符     

fgets() 

char *fgets(char *s, int size, FILE *stream);

从流中读一行或指定个字符   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值