前言
这里尝试与Python对别的方法来学习C语言的文件操作,毕竟我是Pythoner。
文件打开与关闭
Python
#因为是和C语言比对,所以不使用with
filename = "/etc/passwd"
fr = open(filename, 'r') #打开文件
"""
常见的打开模式有:
r只读
w写,如果原来文件有内容会清空
a追加写,不会清空文件原来的内容
+ 读写
rb 二进制只读
wb 二进制写
ab 二进制追加写
...
fr.close()#文件关闭
"""
C语言
const char *filename = "/etc/passwd";
FILE *fr = fopen(filename, "r");//打开文件
/*
读写模式与python类似
*/
fclose(fr);//关闭文件
文件非读写操作
Python
fr.flush() # 直接将缓冲区内容写入文件,不等待
fr.fileno() #返回文件描述符
C语言
fflush(fr);
//描述符是FILE的一个结构体中的一个int类型的变量
文件读操作
Python
# 读所有行返回一个list
lines = fr.readlines()
# 读取一行
line = fr.readline()
line = fr.next()#读取下一行
# 读取一定大小
buffer = fr.read([size])
C语言
/*读取一行*/
char buffer[1024];
printf("%s",fgets(buffer, 1024, fr));
/*读取一字符*/
printf("%c",fgetc( fr));
/*读取所有行*/
int line_count(FILE *fr){
int line_number = 0;
while(1){
char flag;
flag = fgetc(fr);
if (flag == '\n'){
line_number ++;
}
else if(flag == EOF){
line_number ++;
break;
}
}
return line_number;
}
int line_number = line_count(fr);
/*注意如果需要计算完行数后,重新读取文本内容,需要关闭重新打开文件*/
char lines[number][1024];
char buffer[1024];
for (int i=0;i<number;i++){
fgets(buffer, 1024, fr1);
strcpy(lines[i], buffer);
}
for (int j=0; j<number; j++){
printf("line-%d:%s\n", j, lines[j]);
}