C语言文件处理相关接口整理
1. 打开文件fopen:
FILE *fd = NULL;
fd = fopen(char *filepath, char *mode);
if(NULL == fd)
{
printf("fopen file is error.");
return;
}
mode:
读写权限
"r" | 以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。 |
"w" | 以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。 |
"a" | 以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。 |
"r+" | 以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。 |
"w+" | 以“写入/更新”方式打开文件,相当于w 和r+ 叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。 |
"a+" | 以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。 |
读写方式
"t" | 文本文件。如果不写,默认为"t" 。 |
"b" | 二进制文件。 |
读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方式放在读写权限的开头)。
常用的:
"rw+" 可读可写方式打开
"w+" 文件原内容清空,重新写入
2. 关闭文件fclose
除非fopen的fd为NULL,否则必须在文件使用结束时fclose(fd);
3. 文件写入
fwrite(*data, sizeoof(data), data_len, fp) --- 将data的内容写入fp,fp指向写完后的文件末尾位置;
fputc(char, fp) --- 在fp当前位置写入字符char;
fputs(*str, fp) --- 在fp当前位置写入字符串str;
4. 文件读取
fread(*data, sizeoof(data), data_len, fp) --- 将fp的内容读出存入data;
fgets(*str, n, fp) --- 从fp中读取n个字符(最多一行),存入str指向的内存中;
getline(*str, n, fp) --- C++库函数getline;gcc编译器扩展定义了getline()函数,从fp中读取n个字符(最多一行),存入str指向的内存中;
5. 字符串处理
strstr(*origin_str, *obj_str) --- 从origin_str中截取的以obj_str开头的字符串,如果找不到则返回NULL;
strtok(*origin_str, *char) --- 将origin_str中的字符char替换成字符串结束符‘\0’,如果*char为字符串,则其中任意字符都替换成‘\0’;
sprintf(*str, "format:%s,%s", *a, *b) --- 将字符串a,b以"format:%s,%s"的格式存入字符串str中;
sscanf(*str, "format:%s,%s", *a, *b) --- 将字符串str中按照format格式读出字符串存入a,b,返回读取成功的个数,ab都能成功读取返回2;
char
buf[512] = ;
sscanf
(
"123456 "
,
"%s"
, buf);
printf
(
"%s\n"
, buf);
sscanf
(
"123456 "
,
"%4s"
, buf);
printf
(
"%s\n"
, buf);
sscanf
(
"123456 abcdedf"
,
"%[^ ]"
, buf);
printf
(
"%s\n"
, buf);
sscanf
(
"123456abcdedfBCDEF"
,
"%[1-9a-z]"
, buf);
printf
(
"%s\n"
, buf);
sscanf
(
"123456abcdedfBCDEF"
,
"%[^A-Z]"
, buf);
printf
(
"%s\n"
, buf);
sscanf
(
"iios/12DDWDFF@122"
,
"%*[^/]/%[^@]"
, buf);
printf
(
"%s\n"
, buf);
sscanf
(
"hello, world"
,
"%*s%s"
, buf);
printf
(
"%s\n"
, buf);
sscanf
(
"hello:world"
,
"%[^:]:%[^:]"
, buf1, buf2);
printf
(
"%s:%s\n"
, buf1, buf2);