C语言全面细致讲解文件操作

C语言全面细致讲解文件操作攻略

为了进行文件操作,C语言提供了丰富的库函数,其中包括了对文件的读写操作、文件指针的移动、文件属性的获取等操作。在本攻略中,我们将讲解C语言中的文件操作,涵盖文件的打开、读写、关闭等方面,以及常用的文件指针操作和文件属性获取。

文件的打开

在C语言中,文件的打开通常使用fopen()函数,具体的使用方法如下:

FILE *fopen(const char *filename, const char *mode);

其中,filename是需要打开的文件名,mode则是打开方式。mode的取值如下表:

模式 描述
"r" 打开一个已有的文本文件,读取文件
"w" 打开一个文本文件,写入文件或清空文件内容
"a" 打开一个文本文件,文件指针指向文件末尾,可以添加数据
"rb" 打开一个已有的二进制文件,读取文件
"wb" 打开一个二进制文件,写入文件或清空文件内容
"ab" 打开一个二进制文件,文件指针指向文件末尾,可以添加数据
"r+" 打开一个已有的文本文件,文件指针在文件开始位置
"w+" 打开一个文本文件,文件指针在文件开始位置,可以读取和写入文件
"a+" 打开一个文本文件,文件指针指向文件末尾,可以读取和写入文件
"r+b" 打开一个已有的二进制文件,文件指针在文件开始位置
"w+b" 打开一个二进制文件,文件指针在文件开始位置,可以读取和写入文件
"a+b" 打开一个二进制文件,文件指针指向文件末尾,可以读取和写入文件

例如,下面的代码为打开或创建一个名为“test.txt”的文件,并以只写方式打开它。

FILE *fp;
fp = fopen("test.txt", "w");
if(fp == NULL) {
    printf("文件打开失败\n");
}

文件的读写

打开文件之后,我们便可以对其进行读写操作,C语言提供了fread()fwrite()两种函数用来读写文件。这两个函数的具体使用方式如下:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

其中,ptr是需要写入或读出的数据的地址,size是每个数据元素的大小,count是请求的数据元素个数,stream是文件指针。

例如,下面的代码为向打开的文件写入一串字符。

char str[] = "Hello World!";
fwrite(str, sizeof(char), strlen(str), fp);

下面的代码则为读取打开的文件中的一个整数。

int num;
fread(&num, sizeof(int), 1, fp);

文件的关闭

在使用完文件之后,我们需要使用fclose()函数将其关闭,以释放使用的资源。

int fclose(FILE *stream);

例如,下面的代码为关闭之前打开的文件。

fclose(fp);

文件指针操作

在文件操作中,我们常常需要使用文件指针来控制读写的位置,C语言提供了fseek()ftell()两种函数用于操作文件指针。这两个函数的具体使用方式如下:

int fseek(FILE *stream, long offset, int whence);

long ftell(FILE *stream);

其中,stream是文件指针,offset是偏移量,whence指定了偏移量的起始位置,可能的值和含义如下表:

whence 含义
SEEK_SET 文件开头
SEEK_CUR 文件当前读写位置
SEEK_END 文件结尾

例如,下面的代码为将文件指针从文件开头移动到文件尾部。

fseek(fp, 0, SEEK_END);

下面的代码则为获取当前文件指针的位置。

long pos = ftell(fp);

文件属性获取

在文件操作中,我们有时需要获取文件的一些基本属性,如文件大小、文件创建时间、文件修改时间等。对于这些操作,C语言提供了stat()fstat()两个函数。这两个函数的具体使用方式如下:

int stat(const char *path, struct _stat *buffer);

int fstat(int fildes, struct _stat *buffer);

其中,path是文件路径名,fildes是文件描述符,buffer是存放文件属性的结构体。

例如,下面的代码为获取文件“test.txt”的大小。

struct stat file_stat;
stat("test.txt", &file_stat);
printf("文件大小:%lld字节", file_stat.st_size);

下面的代码则为获取打开的文件的创建时间。

struct stat file_stat;
fstat(fileno(fp), &file_stat);
printf("创建时间:%s", ctime(&file_stat.st_ctime));

示例说明

下面的示例展示了如何读取一个存储了学生信息的文件。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME 20
#define MAX_LINE 100

typedef struct {
    char name[MAX_NAME];
    int age;
    double score;
} Student;

void read_student_data(const char *filename);

int main(void)
{
    const char *filename = "students.txt";
    read_student_data(filename);
    return 0;
}

void read_student_data(const char *filename)
{
    FILE *fp;
    Student stu;
    char line[MAX_LINE];
    fp = fopen(filename, "r");
    if(fp == NULL) {
        printf("文件打开失败\n");
        return;
    }
    while(fgets(line, MAX_LINE, fp) != NULL) {
        sscanf(line, "%s %d %lf", stu.name, &stu.age, &stu.score);
        printf("姓名:%s,年龄:%d,分数:%g\n", stu.name, stu.age, stu.score);
    }
    fclose(fp);
}

下面的示例展示了如何向文件中写入一个存储了学生信息的结构体数组。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME 20
#define STUDENT_NUM 3

typedef struct {
    char name[MAX_NAME];
    int age;
    double score;
} Student;

void write_student_data(const char *filename, Student students[], int num);

int main(void)
{
    const char *filename = "students.txt";
    Student students[STUDENT_NUM] = {
        {"张三", 18, 89.5},
        {"李四", 19, 90},
        {"王五", 20, 95.5}
    };
    write_student_data(filename, students, STUDENT_NUM);
    return 0;
}

void write_student_data(const char *filename, Student students[], int num)
{
    FILE *fp;
    fp = fopen(filename, "w");
    if(fp == NULL) {
        printf("文件打开失败\n");
        return;
    }
    for(int i = 0; i < num; i++) {
        fprintf(fp, "%s %d %g\n", students[i].name, students[i].age, students[i].score);
    }
    fclose(fp);
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言全面细致讲解文件操作 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 简单说说angular.json文件的使用

    下面是“简单说说angular.json文件的使用”的完整攻略。 什么是angular.json文件? angular.json是Angular项目的核心配置文件,它包含了项目的所有配置信息,包括构建选项、样式、脚本、插件等等。在Angular CLI中,使用angular.json文件来进行项目配置和构建。在一般情况下,我们不需要手动修改该文件。 angu…

    C 2023年5月23日
    00
  • vscode C++远程调试运行(学习C++用)

    下面是vscode C++远程调试运行的攻略: 准备工作 首先,我们需要在本地安装 Visual Studio Code 和 C++ 编译器,以及在远程服务器上安装 gdbserver 和相应的 C++ 编译器。 安装 Visual Studio Code:进入Visual Studio Code官网,下载并安装最新版本。 安装 C++ 编译器:如果你已经安…

    C 2023年5月23日
    00
  • C语言贪吃蛇经典小游戏

    下面是关于C语言贪吃蛇经典小游戏的完整攻略: 1.主要规则 在贪吃蛇游戏中,玩家需要通过操纵蛇将食物吃掉来增加自身得分,同时要避免蛇头碰到墙壁或者自己的身体,否则游戏失败。在游戏过程中,蛇头碰到界面的边缘将会被传送至对面的边缘。游戏结束后会显示玩家得分及重新开始游戏选项。 2.游戏操作 通过键盘的方向键控制蛇的移动,W键向上,A键向左,S键向下,D键向右; …

    C 2023年5月30日
    00
  • JS运算符简单用法示例

    让我为你详细讲解下“JS运算符简单用法示例”的完整攻略。 概述 在 Javascript 中,运算符是一种符号或关键字,用于对一个或多个值进行操作并生成新值。例如:加法运算符 + 用于将两个值相加,并生成新值。 常见的运算符 下面是一些常见的 Javascript 运算符: 算术运算符 +(加法) -(减法) *(乘法) /(除法) %(取模) 赋值运算符 …

    C 2023年5月22日
    00
  • C++实现宿舍管理查询系统

    C++实现宿舍管理查询系统攻略 1. 系统介绍 C++实现宿舍管理查询系统是一款基于控制台界面的宿舍管理查询应用。该系统主要用于方便宿舍管理员进行学生入住管理和住宿情况查询。系统功能包括:学生信息录入、住宿信息录入、学生信息查询、住宿信息查询、学生信息删除等。 2. 开发环境 操作系统:Windows 10 编程语言:C++ 集成开发环境:Visual St…

    C 2023年5月23日
    00
  • 如何用C语言去除字符串两边的空字符

    当我们读取输入的字符串时,常常会遇到字符串两边有空格的情况。这时候我们需要一个方法去除这些空格,从而使得我们的输入更加规范化。下面是一种使用C语言去除字符串两边空字符的方法: 实现方法 Step 1:定义字符串 首先需要定义一个字符串,用来存储我们输入的字符串。例如: char str[100]; Step 2:读取字符串 接下来需要使用scanf()或fg…

    C 2023年5月23日
    00
  • 详解json string转换为java bean及实例代码

    下面是“详解json string转换为java bean及实例代码”的完整攻略: 什么是JSON JSON是一种轻量级的数据交换格式,具有易读易写、占用带宽小、易解析和支持多种语言等优点。在Web开发中,常用于数据传输和Web API。 JSON to Java Bean 转换 在Java中,我们可以通过JSON的转换将JSON字符串转换成Java Bea…

    C 2023年5月23日
    00
  • 学习C语言的第一天

    今天学习C语言学习了三个部分: 第一个部分是软件环境的搭建,如何搭建一个项目 使用工具:visual studio 2010 搭建过程:新建项目、配置设置(主要是解决运行后一闪而过的问题) 第二部分是编写一个简单的C语言程序代码 #include<stdio.h> //引入头文件 io指的是输入与输出 int main(){ //不可少的入口函数…

    C语言 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部