美文网首页
C语言文件操作

C语言文件操作

作者: 晓晓桑 | 来源:发表于2020-04-26 21:01 被阅读0次

1.打开文件 2.操作文件 3.关闭文件


image.png image.png

文件打开:

#include <time.h>
#include <errno.h>
#include "c3.h"

int main(int argc, char *argv[]) {
    //打开文件
    //文本模式:
    //第一个参数文件路径,第二次参数打开方式 r w a
    // r/rt:只读 文件必须得存在。
    // w:可读可写(擦除写)原来的内容没有了,重新写新的数据。文件不存在,会创建文件。
    // a:可读可写(接着写)如果文件有内容,会在原有的内容尾巴上接着写。文件不存在的时候会创建文件
    // r+:可读可写。 文件必须得存在。「就是比r多了个可写」
    // w+:跟w一样
    // a+:跟a一样

    //二进制模式
    // rb:只读 文件必须得存在。
    // wb:可读可写(擦除写)原来的内容没有了,重新写新的数据。文件不存在,会创建文件。
    // ab:可读可写(接着写)如果文件有内容,会在原有的内容尾巴上接着写。文件不存在的时候会创建文件
    // r+b/rb+:可读可写。 文件必须得存在。「就是比rb多了个可写」
    // w+b/wb+:跟wb一样
    // a+b/ab+:跟ab一样
    FILE *pFILE = fopen("../语言学习.docx", "r");

    if (pFILE == NULL) {
        printf("文件打开失败");
    }
    int a = errno; //官方给的文件错误码。在文件代码之后调用,出错就会返回错误码

    return 0;
}

fwrite写:
fwrite(str, sizeof(char), strlen(str) + 1, pFILE);

#include <time.h>
#include <errno.h>
#include "c3.h"
int main(int argc, char *argv[]) {
    //打开文件 w a
    FILE *pFILE = fopen("../C语言学习.docx", "w");

    if (pFILE == NULL) {
        printf("文件打开失败");
    }

    //写
    char *str = "hahahahah~";
    //-----换行用字符
    //char str1='\n'
    //fwrite(&str1, sizeof(char), 1, pFILE);
    //-----换行用字符串
    //文本模式的时候换行是\n,二进制模式换行是\r\n
    //FILE *pFILE = fopen("../C语言学习.docx", "wb")的时候:
    //char *str3 = "\r\n";
    char *str3 = "\n";
    char *str2 = "heiheiheihei~";
    //strlen(str)+1 把'\0'写进去
    //如果操作失败会返回0。
    fwrite(str, sizeof(char), strlen(str) + 1, pFILE);
    fwrite(str3, sizeof(char), strlen(str3), pFILE);
    fwrite(str2, sizeof(char), strlen(str2) + 1, pFILE);

    //文件关闭 保存
    fclose(pFILE);
    return 0;

fread读文件

#include <time.h>
#include <errno.h>
#include "c3.h"

int main(int argc, char *argv[]) {

    //打开文件 w a
    FILE *pFILE = fopen("../C语言学习.docx", "r");

    if (pFILE == NULL) {
        printf("文件打开失败");
    }

    char str[20] = {0};
    //fread读文件只能用r 或者a ,w不能用,因为w是擦除写
    //参数1:字符数组或者malloc空间
    //参数2*参数3:一次性读出的字节数
    //参数4:文件指针
    //返回值:读的字节数超过文件里面的已有字节数,返回0,
    //没有字符的时候:返回0
    //返回值返回实际读出的字节数:读的过程中没有出现错误。
//    int a = fread(str, sizeof(char), 2, pFILE);
    int a;
    while (a = fread(str, sizeof(char), 2, pFILE)) {
        printf(str);
        //避免最后只剩下一个字符了,但是要读两个数据,其中一个是内存里面的有数据,但是文件里面没数据了
        //导致 读出来多一个字符
        str[0] = 0;
        str[1] = 0;
    }

    //fread读:行结尾
    //文本模式\n 二进制模式是\r\n。对应读fwrite换行。
    //考虑到移植性,用文本模式。因为linux 二进制只有\n,没有\r\n
    //
    //fread读 文件结尾: feof(pFILE); 判断文件是否到文件结尾了
    //feof(pFILE)到结尾返回1,没到结尾返回0
    //所以上面到代码,可以写成
    while (!feof(pFILE)) {
        a = fread(str, sizeof(char), 2, pFILE);
        printf(str);
        str[0] = 0;
        str[1] = 0;
    }

    //文件关闭 保存
    fclose(pFILE);
    return 0;
}

fread和fwrite读写结构体「只有他俩能读写结构体」

#include <time.h>
#include <errno.h>
#include "c3.h"

struct Node {
    int num;
    char name[10];
    double height;
    short age;
};

int main(int argc, char *argv[]) {

    struct Node node = {110011, "xiaoxiao", 160, 27};

    //打开文件 w a
    FILE *pFILE = fopen("../C语言学习.docx", "w");
    if (pFILE == NULL) {
        printf("文件打开失败");
    }
    //写
    fwrite(&node, sizeof(node), 1, pFILE);
    //写完记得保存关闭
    fclose(pFILE);
    
    //读
    struct Node node2;
    FILE *pFILE2 = fopen("../C语言学习.docx", "r");
    while (!feof(pFILE2)) {
        fread(&node2, sizeof(node2), 1, pFILE2);
    }
    //文件关闭 保存
    fclose(pFILE2);
    node2.name;
    return 0;
}
image.png

fputs() 和 fgets()

按行操作。
这两个只能放字符串地址。fread和fwrite可以放任何地址。所以不能写结构体

#include <time.h>
#include <errno.h>
#include "c3.h"

int main(int argc, char *argv[]) {

    //写
    //打开文件 w a
    FILE *pFILE = fopen("../C语言学习.docx", "w");
    //成功返回0,失败返回-1
    fputs("hello fputs 111111\n", pFILE); //换行\n fputs不会主动换行
    fputs("by xiaoxiao", pFILE);
    fclose(pFILE);

    //读
    //打开文件 w a
    FILE *pFILE2 = fopen("../C语言学习.docx", "r");
    //定义大于一行读长度
    char str[30] = {0};
    while (!feof(pFILE2)) {
        fgets(str, 30, pFILE2);//读一行
        printf("%s", str);
    }
    fclose(pFILE2);
    return 0;
}

结果

hello fputs 111111
by xiaoxiao

fscanf()和fprintf()

int main(int argc, char *argv[]) {

    //写
    //打开文件 w a
    FILE *pFILE = fopen("../C语言学习.docx", "w");
    fprintf(pFILE, "%d %.1lf %s", 12, 33.4, "hello xiao"); //用空格
    fclose(pFILE);

    //读
    FILE *pFILE2 = fopen("../C语言学习.docx", "r");
    int a = 0;
    char str[20] = {0};
    double d = 1.2;
    fscanf(pFILE2, "%d %1f %s,", &a, &d, str);//格式跟写必须一样
    fclose(pFILE2);
    return 0;
}

fseek和ftell

fseek设置文件指针对位置


image.png
#include <time.h>
#include <errno.h>
#include "c3.h"

int main(int argc, char *argv[]) {

    //打开文件 w a
    FILE *pFILE = fopen("../C语言学习.docx", "r");

    char str[20] = {0};
    fread(str, 1, 4, pFILE);
    fseek(pFILE, 3L, SEEK_CUR);//SEEK_CUR SEEK_END
    fread(str, 1, 4, pFILE);
    fclose(pFILE);
    return 0;
}

ftell()返回指针当前的位置
int a=ftell(pFILE);//当前的位置的下标

#include <time.h>
#include <errno.h>
#include "c3.h"

int main(int argc, char *argv[]) {

    FILE *pFILE = fopen("../C语言学习.docx", "r");

    char str[20] = {0};
    fread(str, 1, 4, pFILE);
    //fseek指向结尾,然后通过ftell就能知道文件的字符数
    fseek(pFILE, 0L, SEEK_END);
    int a=ftell(pFILE);
    fclose(pFILE);
    return 0;
}

fcose()

关闭文件,更新到文件中,将空间释放。

相关文章

  • C语言文件输入和输出操作的学习心得(四)

    概述 C语言文件输入和输出操作的学习心得(一)C语言文件输入和输出操作的学习心得(二)C语言文件输入和输出操作的学...

  • C语言文件输入和输出操作的学习心得(三)

    概述 在C语言文件输入和输出操作的学习心得(二)已经详细介绍了C语言文件输入的操作,但未介绍如何读取文件的操作。本...

  • c语言文件操作

    在linux中我们知道一切皆文件,那么在c语言中文件操作有哪些呢,我们来看一下。 1.新建文件 定义文件类型指针变...

  • C语言文件操作

    一. 文件指针 1. 在C语言中,规定文件的结构体为FILE,FILE实际上是_iobuf的别名。 2. 定义一个...

  • C语言文件操作

    语言中对文件进行操作必须首先打开文件,打开文件主要涉及到fopen函数。fopen函数的原型为 FILE* fop...

  • C语言-文件操作

    C语言文件 C语言文件有两种类型:文本文件(也称ASCII码文件)和二进制文件。其差别在于存储数值型数据的方式不同...

  • C语言文件操作

    1.打开文件 2.操作文件 3.关闭文件 文件打开: fwrite写:fwrite(str, sizeof(cha...

  • c语言文件操作

    字符串模式指定为文件请求的访问类型,如下所示: “r” 打开以供读取。如果文件不存在或无法找到,则fopen调用失...

  • 2018-09-05

    c语言文件操作 文件操作流程:1.打开文件 2.操作文件 3.关闭文件 文件类型指针:File* fp; 文件打开...

  • 标准I/O库

    文件的操作 文件的基本操作通常有读写增加操作,我们使用C语言的标准库来对文件进行操作使用fopen函数进行打开文件...

网友评论

      本文标题:C语言文件操作

      本文链接:https://www.haomeiwen.com/subject/dixaphtx.html