C语言常用文件处理函数总结
C语言一打文件处理函数,在此整理了一些常用文件处理函数(非常基础),并也整理了python的文件处理方式(也非常基础),以便作个比较。
🚌 标准文件的处理
- C程序会自动打开三个文件:标准输入(对应的文件指针:stdin)、标准输出(stdout)、标准错误输出(stderr)
- 默认的标准输入是键盘,默认的标准输出和标准错误输出是显示器
- 输入函数:
- getchar(): 读取一个字符 ch = getchar()
- gets(): 读取一行字符串 gets(str) 读取换行符并丢弃
- scanf():格式化输入
- 输出函数:
- putchar(): 输出一个字符 putchar(ch)
- puts(): 输出字符串 puts(str) 会在末尾添加换行符
- printf(): 格式化输出
- 上述函数的获取输入或打印输出的对象都是标准输入输出文件,一般也就是显示器和键盘
- 使用重定向可把其它文件作为标准文件,但标准错误输出的输出内容仍会发到屏幕上
🐹 文件的打开关闭
- 打开(指定模式):fopen() e.g. fp = fopen("..file..", "w+") 返回的是文件指针,不能打开文件就返回NULL
- 关闭:fclose(fp) 不能成功关闭返回EOF,成功是0
🎉 文件的读取和写入
- getc()和putc():读取字符 比getchar()、putchar()多了一个文件指针参数
- ch = getc(fp)
- putc(ch, fp)
- fgets()和fputs(): 读取字符串
- fgets(): fgets(buf, MAX, fp)(buf是字符串地址) 读取换行符并保存 何时停止:读到一行结尾or读到MAX-1个字符or读到EOF
- fputs(): fputs(buf,fp) fputs不会添加换行符
- fprintf()和fscanf():读取字符串(格式化) 比printf()、scanf()多了一个文件指针参数(作为第一个参数)
- fread()和fwrite(): 以二进制形式进行读写操作; 第二个参数是一个数据块的大小,第三个参数是数据块的数目
- fread():e.g. fread(buffer, 1, 256, fp);
- fwrite(): e.g. fwrite(buffer, 1, 256, fp);
🎂 文件的定位
- fseek: 让你像数组一样对待一个文件 e.g. fseek(fp, 0L, SEEK_SET)
- 第一个参数是文件指针,第二个参数是偏移量,第三个参数是文件起点模式(SEEK_SET SEEK_CUR SEEK_END)
- 一切正常返回0,有错误出现返回-1
- ftell: 返回文件当前位置 e.g. current = ftell(fp) 它通过返回距文件开始处的字节数目来确定文件位置,文件的第一个字节到文件开始处的距离是0字节.
- rewind:把当前文件指针移动到文件开始 e.g. rewind(fp)
🍮 文件读写函数的返回值汇总
- fopen 正常返回:被打开文件的文件指针。异常返回:NULL,表示打开操作不成功。
- fclose 正常返回:0。异常返回:EOF,表示文件在关闭时发生错误。
- fgets 正常返回:返回字符串的内存首地址,即str的值。非正常返回(发生错误或到了文件结尾):返回一个NULL值
- fputs 正常返回:写入文件的字符个数,即字符串的长度。非正常返回:返回一个NULL值。
- gets 同fgets
- puts 一般不用其返回值
- fprintf 返回值无。
- fscanf 成功返回读入的参数的个数,失败返回EOF(-1)
- fread fwrite 返回成功读取的数据块数目
- scanf 同fscanf
- printf 一般不用其返回值
🚜 比较:python的常用文件处理函数
- 读取文件: ```python '''四种方式''' with open('py.txt') as file_object: # 使用with即使发生错误可以关闭文件 contents = file_object.read() # 全部读取,返回字符串 print(contents.strip())
with open('py.txt') as file_object: for line in file_object: # 一行一行读取,返回字符串 print(line.rstrip())
with open('py.txt') as file_object: lines = file_object.readlines() # 读取所有行,返回列表 for line in lines: print(line)
file_object = open('py.txt') # 打开方式不用with ... file_object.close() ```
- 写入文件:
file_object.write("...")
- 指针移动(相当于c中的fseek)
seek()方法(类似C中的fseek()函数)可以在文件中移动文件指针到不同的位置. 位置的默认值为 0 , 代表从文件开头算起, 1 代表从当前位置算起, 2 代表从文件末尾算起. c中,0, 1, 2 分别对应着常量 SEEK_SET, SEEK_CUR,以及 SEEK_END.
e.g. file_object.seek(5,0)
20190819