文件编辑

 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;
}

 

posted @ 2015-09-05 23:06  没错我就是菊花侠  阅读(491)  评论(0编辑  收藏  举报