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+" 以“写入/更新”方式打开文件,相当于wr+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
"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;

1.一般用法
char buf[512] = ;
sscanf("123456 ""%s", buf);
printf("%s\n", buf);
结果为:123456
2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ""%4s", buf);
printf("%s\n", buf);
结果为:1234
3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf""%[^ ]", buf);
printf("%s\n", buf);
结果为:123456
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF""%[1-9a-z]", buf);
printf("%s\n", buf);
结果为:123456abcdedf
5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF""%[^A-Z]", buf);
printf("%s\n", buf);
结果为:123456abcdedf
6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122""%*[^/]/%[^@]", buf);
printf("%s\n", buf);
结果为:12DDWDFF
7、给定一个字符串"hello, world",仅保留"world"。(注意:“,”之后有一空格)
sscanf("hello, world""%*s%s", buf);
printf("%s\n", buf);
结果为:world  
P.S. %*s表示第一个匹配到的%s被过滤掉,即hello,被过滤了,如果没有空格则结果为NULL。
8. 给定一个字符串"hello:world",读取:前后的"hello","world"
sscanf("hello:world""%[^:]:%[^:]", buf1, buf2);
printf("%s:%s\n", buf1, buf2);
结果为:hello:world
posted @ 2021-04-12 15:52  Wenssie_xu  阅读(294)  评论(0编辑  收藏  举报