C语言基础(十一)- 文件和目录操作运算

来源:互联网 发布:电脑硬盘加密软件 编辑:程序博客网 时间:2024/05/21 06:00

C\C++关于FILE结构定义说明

//此结构VC定义于stdio.h头文件中,struct _iobuf {      char   *_ptr;      //文件输入的下一个位置      int    _cnt;       //当前缓冲区的相对位置      char   *_base;     //指基础位置(应该是文件的其始位置)      int    _flag;      //文件标志      int    _file;      //文件的有效性验证      int    _charbuf;   //检查缓冲区状况,如果无缓冲区则不读取      int    _bufsiz;    //文件的大小      char   *_tmpfname; //临时文件名 };typedef   struct   _iobuf   FILE; 


文件的打开、关闭、以及简单读写

# include <stdio.h># include <stdlib.h>int main() {    FILE * open_file(char *, char *);    FILE *fp;    /*     * 向文件中写入字符     * fputc 写入成功返回写入的字符,写入失败返回C语言定义的EOF(符号常量,值为-1)     */    fp = open_file("C:/Users/kinglyjn/Desktop/test.txt", "a+"); //打开文件    char c = getchar();    while (c!='*') {        fputc(c, fp);  //        c = getchar(); //从控制台取到一个字符    }    fclose(fp); //关闭文件    /**    * 从文件中读出字符(文件的打开方式必须为读方式或读写方式)    * 文件结束时,fgetc函数就会返回文件的结束标志EOF(-1)    */    fp = open_file("C:/Users/kinglyjn/Desktop/test.txt", "r");    c = fgetc(fp);    while (c!=EOF) {        putchar(c); //输出一个字符到控制台        c = fgetc(fp); //    }    fclose(fp);    return 0;}//文件打开函数FILE * open_file(char * filename, char * mode) {    FILE *fp = fopen(filename, mode); //r w a rb wb ab r+ w+ a+ rb+ wb+ ab+ 只读 重写 追加    if (fp==NULL) {        printf("打开失败!\n");        exit(1);    } else {        printf("打开成功!\n");    }    return fp;}/*r  打开只读文件,该文件必须存在r+ 打开可读写的文件,该文件必须存在w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失.若文件不存在则建立该文件a 以附加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留a+ 以附加方式打开可读写的文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件*/


块读写函数fwrite和fread

# include <stdio.h># include <stdlib.h>typedef struct Student {    char name[10];    float score;} Stu;int main() {    FILE * open_file(char *, char *);    FILE *fp;    Stu stus[3] = { {"张三", 22.2}, {"李四", 33.3}, {"王五", 44.4} };    Stu stus2[3];    int len = 3;    //fwrite    //fwrite(buffer,size,count,fp)    //(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。    //(2)size:要读写的字节数;    //(3)count:要进行读写多少个size字节的数据项;    //(4)fp:文件型指针。    fp = open_file("/Users/zhangqingli/Desktop/test.txt", "w");    for (int i=0; i<len; i++) {        fwrite(&stus[i], sizeof(Stu), 1, fp); //    }    fclose(fp);    //fread    //fread(buffer,size,count,fp)    fp = open_file("/Users/zhangqingli/Desktop/test.txt", "r");    for (int i=0; i<len; i++) {        fread(&stus2[i], sizeof(Stu), 1, fp);    }    fclose(fp);    for (int i=0; i<len; i++) {        printf("%-10s %-5.2f\n", stus2[i].name, stus2[i].score);    }    return 0;}//文件打开函数FILE * open_file(char * filename, char * mode) {    FILE *fp = fopen(filename, mode); //r w a rb wb ab r+ w+ a+ rb+ wb+ ab+ 只读 重写 追加    if (fp==NULL) {        printf("打开失败!\n");        exit(1);    } else {        printf("打开成功!\n");    }    return fp;}


格式化文件输入和输出函数fprintf和fscanf

  • printf/scanf函数的读写对象是终端
  • fprintf/fscanf函数的读写对象是磁盘文件
# include <stdio.h># include <stdlib.h>typedef struct {    char name[10];    float score;} St;int main() {    FILE * fp;    FILE * open_file(char * filename, char * mode);    //fprintf    fp = open_file("/Users/zhangqingli/Desktop/test.txt", "w");    fprintf(fp, "%s %f", "张三", 23.2);    fprintf(fp, "%s %f", "李四", 23.3);    fprintf(fp, "%s %f", "王五", 23.4);    fclose(fp);    //fscanf    St *stus = (St *) malloc(sizeof(St)*3);    fp = open_file("/Users/zhangqingli/Desktop/test.txt", "r");    int i=0;    while (!feof(fp)) {        fscanf(fp, "%s %f", stus[i].name, &stus[i].score);        i++;    }    fclose(fp);    for (int i=0; i<3; i++) {        printf("姓名:%s  分数:%f\n", stus[i].name, stus[i].score);    }    return 0;}//文件打开函数FILE * open_file(char * filename, char * mode) {    FILE *fp = fopen(filename, mode); //r w a rb wb ab r+ w+ a+ rb+ wb+ ab+ 只读 重写 追加    if (fp==NULL) {        printf("打开失败!\n");        exit(1);    } else {        printf("打开成功!\n");    }    return fp;}

文件的定位

# include <stdio.h># include <stdlib.h>int main() {    FILE *fp1;    FILE * open_file(const char *, const char *);    fp1 = open_file("/Users/zhangqingli/Desktop/test.txt", "rb");    //把文件的位置指针移动到文件尾    fseek(fp1, 0, SEEK_END);    //获取文件当前指针的位置    long len = ftell(fp1); //根据前面的操作可获取文件的长度    printf("文件的大小为:%ld 字节\b", len);    return 0;}FILE * open_file(const char * filename, const char * mode) {    FILE *fp = fopen(filename, mode);    if (fp==NULL) {        printf("文件打开时出错!\n");        exit(1);    }    return fp;}


0 0
原创粉丝点击