文件编辑
1、文件创建
任务描述:
- 输入要创建的文件名,输出是否创建成功信息
相关知识:
-
FILE *fopen(const char *path, const char *mode):创建文件
fopen函数打开一个文件,文件名由函数参数path给出。参数mode指向一个字符串,字符串中包含着访问文件的方式,具有有:
“r”: 以只读方式打开文件,该文件必须存在。
“w”: 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
“r+”: 以可读写方式打开文件,该文件必须存在。
“w+”: 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
“a”: 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
“a+”: 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
如果打开文件成功,则fopen函数返回一个指向FILE结构体的指针,否则返回NULL,并把错误代码存在errno中。
FILE是个结构体,包含了管理文件流所需的各个信息,包括文件描述符,指向缓冲区的指针等。
使用w,w+,或a+,都可以创建一个文件。
-
int fclose(FILE* stream):使用fclose函数来关闭fopen打开的文件流关闭一个流,可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。
main.c:
#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { FILE *fp; if(argc!=2){ perror("argc error\n"); exit(1); } fp=fopen(argv[1],"w"); if(fp==NULL){ perror("fopen fail\n"); exit(1); } else printf("create success\n"); fclose(fp); return 0; }
2、文件写
任务描述:
- 输入文件名及要写入文件的字符串
- 每次需要在原有文件内容基础上追加写入
相关知识:
-
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream):向文件中写入数据
ptr:用于获取数据的地址(指针)
size:单个元素的大小,单位是字节
nmemb:元素个数
stream:提供数据的文件指针
函数返回写入文件的元素的个数
main.c:
#include<stdio.h> #include<stdlib.h> #include<string.h>
int main(int argc,char *argv[]) { FILE *fp; char str[20]={'\0'}; if(argc!=3){ perror("argc error\n"); exit(1); } fp=fopen(argv[1],"a+"); if(fp==NULL){ perror("fopen fail\n"); exit(1); } strcpy(str,argv[2]); fwrite(str,1,strlen(str),fp); fclose(fp); return 0; }
3、文件读
任务描述:
- 命令行中以文本文件名做输入参数,打印文件中内容
相关知识:
-
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream):从文件中读取数据
ptr:用于接收数据的地址(指针)
size:单个元素的大小,单位是字节
nmemb:元素个数
stream:提供数据的文件指针
返回值:读取的元素的个数
main.c:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char *argv[]) { FILE *fp; char str[20]={'\0'}; //memset(str,'\0',20); if(argc!=2){ perror("argc error\n"); exit(1); } fp=fopen(argv[1],"r"); if(fp==NULL){ perror("fopen fail\n"); exit(1); } printf("The text in file is:"); fread(str,1,20,fp); printf("%s",str); fclose(fp); return 0; }
4、文件的重命名
任务描述:
- 输入文件名以及新文件名,输出是否成功命名文件
相关知识:
-
int rename(const char *old_filename, const char *new_filename):对文件进行重命名
old_filename: 包含将要被重命名的文件的原始名称。
new_filename:新的文件名称。
main.c:
#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int a; if(argc!=3){ perror("argc error\n"); exit(1); } a=rename(argv[1],argv[2]); if(a==-1){ perror("rename error\n"); exit(1); } else printf("rename success\n"); return 0; }
5、文件另存为
任务描述:
- 将已有文件另存为一个新的文件
- 综合文件的创建和读写操作
main.c:
#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { FILE *fp1,*fp2; int n;char str[512]; if(argc!=3){ perror("argc error\n"); exit(1); } fp1=fopen(argv[1],"r"); if(fp1==NULL){ perror("fopen1 fail\n"); exit(1); } fp2=fopen(argv[2],"w"); if(fp2==NULL){ perror("fopen2 fail\n"); exit(1); } n=fread(str,1,20,fp1); if(n==-1){ perror("save fail\n"); exit(1); } else{ fwrite(str,1,n,fp2); printf("save success\n"); } fclose(fp1); fclose(fp2); return 0; }
6、文件的删除
任务描述:
- 输入要删除的文件名,输出是否删除成功的信息
相关知识:
-
int remove(const char *filename):删除文件
main.c:
#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { FILE *fp1;int n; if(argc!=2){ perror("argc error\n"); exit(1); } /* fp1=fopen(argv[1],"r"); if(fp1==NULL){ perror("fopen1 fail\n"); exit(1); } */ n=remove(argv[1]); if(n!=0){ perror("removr error\n"); exit(1); } else printf("remove success\n"); // fclose(fp1); return 0; }