C语言编程之文件操作

这篇具有很好参考价值的文章主要介绍了C语言编程之文件操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 Preface/Foreword

1 C文件概述

 文件(File)是程序设计中的一个重要的概念。所谓“文件”一般指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介质(如磁盘)上。操作系统以文件为单位对数据进行管理,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标识),才能向它输出数据。

刚学习C语言编程时候,使用到的输入(Input)和输出(Output),是以终端(Terminal)为对象,即从终端键盘输入数据,运行结果输出到终端。从操作系统的角度看,与主机相连的输入输出设备都看做是一个文件。例如,终端键盘是输入文件显示屏和打印机是输出文件

程序在运行时,经常需要将一些数据输出到磁盘上存放起来,方便后面需要时再从磁盘中输入到计算机内存。这里就需要使用到磁盘文件

C语言把文件看作是一个字符(字节)的序列(Sequence),即由一个一个的字符(字节)数据顺序组成。根据数据的组织方式,可以分为ASCII文件二进制文件ASCII文件称为文本(text)文件,它的每一个字节一个ASCII代码,代表一个字符二进制文件是把内存中的数据按照其在内存中的存储形式原样输出到磁盘上存放。如果一个整数1000,在内存中占2个字节,如果按照ASCII码形式输出,则占4个字节,而按照二进制形式输出,在磁盘上只占2个字节。用ASCII码输出与字符一一对应,一个字节代表一个字符,因此方便对字符进行逐个处理,也方便输出字符;但一般占用存储空间多,而且要花费转换时间(二进制形式与ASCII码间的转换)。用二进制形式输出数值,可以节省外存空间和转换时间,但是一个字节并不对应一个字符,不能直接输出字符形式。一般中间结果数据需要暂时保存在外存上,以后又需要输入到内存的,常用二进制文件保存。

C语言编程之文件操作,项目管理,C文件

一个C文件是一个字符流二进制流。它把数据看作是一连串的字符(字节),而不考虑记录的界限,即C语言中的文件不是由记录(record)组成的。在C语言中对文件的存取是以字符(字节)为单位。输入输出的数据流的开始和结束仅受程序控制不受物理符号(比如回车换行符)控制。即在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔。把这种文件称为流式文件。C语言允许对文件存取一个字符,这样增加了处理的灵活性。

C版本有两种对文件处理方法:一种是“缓冲文件系统”,一种叫“非缓冲文件系统”

缓冲文件系统系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区。(缓冲区的大小一般为512字节,具体与C版本有关)

C语言编程之文件操作,项目管理,C文件

非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。 

UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统处理二进制文件ANSI C标准不采用非缓冲文件系统,只采用缓冲文件系统,即既用缓冲文件系统处理文本文件,也用它处理二进制文件,也就是将缓冲文件系统扩充为可处理二进制文件。

C语言中,没有输入输出语句,对文件的读写都是用库函数来实现。ANSI规定了标准输入和输出函数,用它们对文件进行读写

博客中只介绍ANSI C规定的缓冲文件系统以及对它的读写。

2. 文件类型指针

缓冲文件系统中,关键的概念是“文件指针”。每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字,文件状态及文件当前位置)。这些信息是保存在一个结构体变量中,该结构体类型是由系统定义的,取名为FILE。Turbo C在stdio.h文件中有以下的文件类型声明:

typedef struct

{

        short                 level; /* 缓冲区“满”和“空”的程度 */

        unsigned          flags; /* 文件状态标志 */

        char                  fd;     /* 文件描述符 */

        unsigned char  hold;  /* 如无缓冲区不读取字符 */

        short                 bsize;/* 缓冲区大小 */

        unsigned char  *buffer;/* 数据缓冲区的位置 */

        unsigned char  *curp;  /* 指针,当前的指向 */

        unsigned          istemp;/* 临时文件指示器 */

        short                 token; /* 用于有效性检查 */

}FILE;

3 文件打开和关闭

和其他高级语言一样,对文件读写之前应该“打开”文件,在使用结束之后应该“关闭”文件。 

3.1 打开文件(fopen函数)

ANSI C规定了标准输入输出函数库,用fopen()函数实现打开文件。

fopen的函数原型为: FILE *fopen(const char *filename, const char *mode);其功能是使用给定的模式 mode 打开 filename 所指向的文件文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL,并把错误代码存在 error 中。该函数位于C 标准库<stdio.h>中。以下关于使用文件方式的表格:

文件使用方式

含义

“r”(只读)

为输入打开一个文本文件

w

打开一个文本文件

a追加

文本文件尾添加数据

rb(只读)

为输入打开一二进制文件

wb(只写)

为输出打开一二进制文件

ab(追加)

二进制文件尾添加数据

r+(读

读写打开一个文本文件

w+

读写建立一个新的文本文件

a+(追加)

为读写打开一个文本文件

rb+”(读写)

为读写打开一二进制文件

wb+”(读写)

为读写建立一个新二进制文件

ab+”(追加)

为读写打开一二进制文件

 以下几点内容需要注意:

  1. “r”方式打开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件应该已经存在。
  2. “w”方式打开的文件只能用于向该文件写数据(即输出文件),不能用来向计算机输入。如果原来不存在该文件,则在打开时新建立一个以指定的名字命名的文件。如果原来已经存在一个以该名字命名的文件,则在打开时将该文件删去,然后重新建立一个新文件。
  3. 如果希望向文件末尾添加新的数据(不希望删除原有数据),则应该用“a”方式打开。
  4. 在向计算机输入文本文件时,将回车换行符转换为一个换行符,在输出时把换行符转成为回车和换行连个字符。
  5. 在程序开始运行时,系统自动打开3个标准文件:标准输入,标准输出;标准出错输出。系统自动定义了3个文件指针stdin, stdout, stderr,分别指向终端输入,终端输出和标准出错输出(也从终端输出)。

源码如下

#include <stdio.h>

//#define FILE_NAME "1.txt"
#define FILE_NAME "2.txt"
//#define FILE_OP_MODE "r"
#define FILE_OP_MODE "a"
//#define FILE_OP_MODE "wb+"
int main (void)
{
        int ret = 0;
        FILE *fp = NULL;
        if (fp = fopen(FILE_NAME, FILE_OP_MODE)) {
                printf("file successfully open\n");
        } else {

                printf("file cannot open\n");
        }
        if (fp) {
                ret = fputc('a',fp);
                putchar('*');
                putchar('*');
                putchar('*');
                putchar('\n');
                printf("ret = %d\n", ret);
        }
        if (NULL != fp) {
                ret = fclose(fp);
        }

        printf("ret = %d\n", ret);
        return ret;
}

运行结果

C语言编程之文件操作,项目管理,C文件

3.2 关闭文件(fclose函数)

在使用完一个文件后应该关闭它,以防止它再被误用。关闭就是使文件指针变量不指向该文件,也就是文件指针变量与文件脱钩,此后不能再通过该指针对原与其相关联的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。

fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
函数原型:int fclose( FILE *fp );
返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)

源码如下

#include <stdio.h>

#define FILE_NAME "1.txt"
//#define FILE_NAME "2.txt"
#define FILE_OP_MODE "r"
int main (void)
{
        int ret = 0;
        FILE *fp = NULL;
        if (fp = fopen(FILE_NAME, FILE_OP_MODE)) {
                printf("file successfully open\n");
        } else {

                printf("file cannot open\n");
        }
        if (NULL != fp) {
                ret = fclose(fp);
        }

        printf("ret = %d\n", ret);
        return ret;
}

运行结果如下

C语言编程之文件操作,项目管理,C文件

4 文件的读写

文件打开之后,就可以对它进行读写。

4.1 fputc函数和fgetc函数(putc函数和getc函数) 

4.1.1 fputc函数 

把一个字符写到磁盘文件中。

函数名称:写入字符文件函数fputc()

函数格式:fputc (char c, File *fp)参数解释:fp为文件指针,它的值是执行fopen()打开文件时获得的。c为输入的字符量。

返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。 

打印函数putchar其实是fputc的派生(derive)函数。

#define putchar(c) fputc(c, stdout)

源码如下

#include <stdio.h>

#define FILE_NAME "1.txt"
//#define FILE_NAME "2.txt"
//#define FILE_OP_MODE "r"
#define FILE_OP_MODE "a"
int main (void)
{
        int ret = 0;
        FILE *fp = NULL;
        if (fp = fopen(FILE_NAME, FILE_OP_MODE)) {
                printf("file successfully open\n");
        } else {

                printf("file cannot open\n");
        }
        if (fp) {
                ret = fputc('a',fp);
                putchar('*');
                putchar('*');
                putchar('*');
                putchar('\n');
                printf("ret = %d\n", ret);
        }
        if (NULL != fp) {
                ret = fclose(fp);
        }

        printf("ret = %d\n", ret);
        return ret;
}

运行结果: 

C语言编程之文件操作,项目管理,C文件

4.1.2  fgetc函数

从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。

fgetc是从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。格式:char fgetc(FILE *stream); 

 读成功,返回字符对应的ASCII码值,读错误或者文件已经到了末尾(文本文件),返回EOF(-1),因为字符的ASCII码值都是正数。

ANSI C也可以用缓冲文件系统处理二进制文件,所以当返回fgetc的返回值为-1时,也不代表文件一定是到了文件末尾,体用feof函数来判断是否到了文件末尾。

源码如下

#include <stdio.h>

#define FILE_NAME "2.txt"
#define FILE_OP_MODE "r+"
int main (void)
{
        int ret = 0;
        FILE *fp = NULL;
        if (fp = fopen(FILE_NAME, FILE_OP_MODE)) {
                printf("file successfully open\n");
        } else {

                printf("file cannot open\n");
        }
        if (fp) {
                putchar('*');
                putchar('*');
                putchar('*');
                putchar('\n');
                char ch = 0;
                ch = fgetc(fp);
                while (EOF != ch) {
                        putchar(ch);
                        ch = fgetc(fp);
                }
        }
        if (NULL != fp) {
                ret = fclose(fp);
        }

        putchar('*');
        putchar('*');
        putchar('*');
        putchar('\n');
        printf("ret = %d\n", ret);
        return ret;
}
~                    

运行结果

C语言编程之文件操作,项目管理,C文件

4.1.3 feof函数

feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值;文件未结束:返回0值)。 

源码如下

#include <stdio.h>

#define FILE_NAME "2.txt"
#define FILE_OP_MODE "r"
int main (void)
{
        int ret = 0;
        FILE *fp = NULL;
        if (fp = fopen(FILE_NAME, FILE_OP_MODE)) {
                printf("file successfully open\n");
        } else {

                printf("file cannot open\n");
        }
        if (fp) {
                putchar('*');
                putchar('*');
                putchar('*');
                putchar('\n');
                char ch = 0;
                ch = fgetc(fp);
                //while (EOF != ch) {
                while (!feof(fp)) {
                        printf("%d\n", ch);
                        ch = fgetc(fp);
                }

        }
        if (NULL != fp) {
                ret = fclose(fp);
        }

        putchar('*');
        putchar('*');
        putchar('*');
        putchar('\n');
        printf("ret = %d\n", ret);
        return ret;
}
~                 

运行结果

2.txt文件类型和内容如下:文件内容为2进制,不是ASCII编码。

C语言编程之文件操作,项目管理,C文件C语言编程之文件操作,项目管理,C文件 

4.1.4 scanf

 原型:int scanf(const char * restrict format,...); 

函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

源码1

#include <stdio.h>

#define FILE_NAME "1.txt"
#define FILE_OP_MODE "w+"
int main (void)
{
        int ret = 0;
        FILE *fp = NULL;
        if (fp = fopen(FILE_NAME, FILE_OP_MODE)) {
                printf("file successfully open\n");

        } else {

                printf("file cannot open\n");
        }
        if (fp) {
                char ch = 0;
                printf("Please input a character:\n");
                scanf("%c", &ch);
                getchar(); //to get the whitespace '\n'
                while ('#'!= ch) {
                        fputc(ch, fp);
                        printf("Please input a character:\n");
                        scanf("%c", &ch);
                        getchar(); // to get the whitespace '\n'
                }
        }

        if (NULL != fp) {
                ret = fclose(fp);
        }

        printf("ret = %d\n", ret);
        return ret;
}

运行结果

C语言编程之文件操作,项目管理,C文件

 NOTE:在输入字符或者字符串时,要特别注意以下两个信息残留问题

  1. 键盘缓冲区残留信息问题
  2. stdin残留信息

源码2

#include <stdio.h>

#define FILE_NAME "1.txt"
#define FILE_OP_MODE "w+"
int main (void)
{
        int ret = 0;
        FILE *fp = NULL;
        if (fp = fopen(FILE_NAME, FILE_OP_MODE)) {
                printf("file successfully open\n");

        } else {

                printf("file cannot open\n");
        }
        if (fp) {
                char ch = 0;
                printf("Please input a character:\n");
                ch = getchar();
                while ('#'!= ch) {
                        fputc(ch, fp);
                        printf("Please input a character:\n");
                        ch = getchar();
                }
                fputc('\n', fp);
        }

        if (NULL != fp) {
                ret = fclose(fp);
        }

        printf("ret = %d\n", ret);
        return ret;
}

运行结果

 C语言编程之文件操作,项目管理,C文件

源码3

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

#define FILE_OP_MODE_W "w"
#define FILE_OP_MODE_R "r"
#define PARAM_LEN       3
int main (int argc, char *argv[])
{
        int ret = 0;
        FILE *fIn = NULL;
        FILE *fOut = NULL;
        char c=0;
        if (PARAM_LEN != argc) {
                printf("Please enter input and output file name\n");
                exit(0);
        }
        // open input file
        if (fIn = fopen(argv[1], FILE_OP_MODE_R)) {
                printf("Input file successfully open\n");

        } else {

                printf("Input file cannot open\n");
                exit(0);
        }
        // open output file
        if (fOut = fopen(argv[2], FILE_OP_MODE_W)) {
                printf("Output file successfully open\n");

        } else {

                printf("Output file cannot open\n");
                exit(0);
        }

        // copy input file to output file
        //while (!feof(fIn)) {
        while (EOF != (c=fgetc(fIn))) {
                fputc(c, fOut);
                //fputc(fgetc(fIn), fOut);
        }

        //close files
        fclose(fIn);
        fclose(fOut);

        printf("ret = %d\n", ret);
        return ret;
}

运行结果:

 C语言编程之文件操作,项目管理,C文件

源码4

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

#define FILE_OP_MODE_W "w"
#define FILE_OP_MODE_R "r"
#define PARAM_LEN       3
int main (int argc, char *argv[])
{
        int ret = 0;
        FILE *fIn = NULL;
        FILE *fOut = NULL;
        char c=0;
        if (PARAM_LEN != argc) {
                printf("Please enter input and output file name\n");
                exit(0);
        }
        // open input file
        if (fIn = fopen(argv[1], FILE_OP_MODE_R)) {
                printf("Input file successfully open\n");

        } else {

                printf("Input file cannot open\n");
                exit(0);
        }
        // open output file
        if (fOut = fopen(argv[2], FILE_OP_MODE_W)) {
                printf("Output file successfully open\n");

        } else {

                printf("Output file cannot open\n");
                exit(0);
        }

        // copy input file to output file
        while (!feof(fIn)) {
        //while (EOF != (c=fgetc(fIn))) {
                //fputc(c, fOut);
                fputc(fgetc(fIn), fOut);
        }

        //close files
        fclose(fIn);
        fclose(fOut);

        printf("ret = %d\n", ret);
        return ret;
}

运行结果:

C语言编程之文件操作,项目管理,C文件

NOTE: ISO-8859 

4.1.5 putchar

 #define putchar(c) fputc(c, stdout)

4.1.6 getchar

#define getchar() fgetc(stdin)

4.1.7 getc

#define getc(fp) fgetc(fp)

4.1.8 putc

#define putc(ch, fp) putc(ch, fp)

4.1.9 fread

从给定输入流stream读取最多count个对象到数组buffer中(相当于对每个对象调用size次fgetc),把buffer当作unsigned char数组并顺序保存结果。流的文件位置指示器前进读取的字节数。

size_t fread( void *buffer, size_t size, size_t count, FILE *fp );

参数解析:

  • buffer:指针,读入数据的存放地址
  • size:读入的字节数
  • count:需要读多少个size字节的数据项
  • fp:文件指针,读入数据的流文件

源码:从磁盘中读出内存,并打印到屏幕

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

#define FILE_OP_MODE_R "rb+"
#define RECORD_STU_DATA "student.txt"
#define AMOUNT          1
#define WRITE_FAILED    0

typedef struct student{
        int num;
        char name[10];
        int age;
        char addr[20];
}stu_t;
stu_t stu[AMOUNT];

void load(void);
void display_stu_info(void);

int main (int argc, char *argv[])
{
        int ret = 0;
        load();
        printf("ret = %d\n", ret);
        return ret;
}

void load(void)
{
        FILE *fp = NULL;
        int cnt = 0;
        printf("enter load function---->\n");
        fp = fopen(RECORD_STU_DATA, FILE_OP_MODE_R);
        if (NULL != fp) {
                printf("open file successfully\n");
                for (int i=0; i<AMOUNT; i++) {
                        cnt = fread(&stu[i], sizeof(stu_t), 1, fp);
                        if (WRITE_FAILED == cnt) {
                                printf("fail to read file\n");
                                break;
                        }
                }

        } else {
                return;
        }
        display_stu_info();
        fclose(fp);
}

void display_stu_info(void)
{
        printf("enter display function---->\n");

        for (int i=0; i<AMOUNT; i++) {
                printf("stu[%d].num:%d, stu[%d].name:%s, stu[%d].age:%d, stu[%d].addr:%s\n", i, stu[i].num, i, stu[i].name, i, stu[i].age, i, stu[i].addr);
        }
}

运行结果

C语言编程之文件操作,项目管理,C文件

4.1.10 fwrite

fwrite() 是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。

size_t fwrite( void *buffer, size_t size, size_t count, FILE *fp );

参数解析:

  • buffer:指针,输出数据的存放地址
  • size:写数据的字节数
  • count:需要写多少个size字节的数据项
  • fp:文件指针,输出数据的流文件

源码:从键盘中输入学生信息,并将数据保存到磁盘中

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

#define FILE_OP_MODE_W "wb+"
#define RECORD_STU_DATA "student.txt"
#define AMOUNT          1
#define WRITE_FAILED    0

typedef struct student{
        int num;
        char name[10];
        int age;
        char addr[20];
}stu_t;
stu_t stu[AMOUNT];

void save(void);
int main (int argc, char *argv[])
{
        int ret = 0;
        for (int i=0; i<AMOUNT; i++) {
                printf("Please input student's informations as below:\n");

                // input student's number
                printf("Enter student number->\n");
                scanf("%d", &stu[i].num);
                printf("stu[%d].num = %d\n", i, stu[i].num);


                // input student's name
                printf("Enter student name->\n");
                scanf("%s", stu[i].name);
                printf("stu[%d].name = %s\n", i, stu[i].name);

                // input student's age
                printf("Enter student age->\n");
                scanf("%d", &stu[i].age);
                printf("stu[%d].age = %d\n", i, stu[i].age);

                // input student's address
                printf("Enter student address->\n");
                scanf("%s", stu[i].addr);
                printf("stu[%d].addr = %s\n", i, stu[i].addr);
        }
        save();
        printf("ret = %d\n", ret);
        return ret;
}
void save(void)
{
        FILE *fp = NULL;
        int cnt = 0;
        printf("enter save function---->\n");
        fp = fopen(RECORD_STU_DATA, FILE_OP_MODE_W);
        if (NULL != fp) {
                printf("open file successfully\n");
                for (int i=0; i<AMOUNT; i++) {
                        cnt = fwrite(&stu[i], sizeof(stu_t), 1, fp);
                        if (WRITE_FAILED == cnt) {
                                printf("fail to write file\n");
                                break;
                        }
                }

        } else {
                return;
        }
        fclose(fp);
}

运行结果

C语言编程之文件操作,项目管理,C文件

C语言编程之文件操作,项目管理,C文件

4.1.11 fprintf

printf是C/C++中的一个格式化库函数,位于头文件<cstdio>;中,其作用是格式化输出到一个流文件中;函数原型为int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函数根据指定的格式(format),向输出流(stream)写入数据(argument)。

返回值:输出的字符数

源码

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

#define FILE_OP_MODE_R "wb+"
#define RECORD_STU_DATA "test.txt"

int main (int argc, char *argv[])
{
        int ret = 0;
        int cnt = 0;
        FILE *fp = fopen(RECORD_STU_DATA, FILE_OP_MODE_R);
        if (NULL == fp) {
                printf("open failed\n");
                return -1;
        }

        cnt = fprintf(fp, "%d %s\n",1, "123456");
        fclose(fp);
        printf("cnt = %d\n", cnt);
        printf("ret = %d\n", ret);
        return ret;
}

运行结果

C语言编程之文件操作,项目管理,C文件

4.1.12 fscanf 

4.1.13 fputs

功能:将字符串输出到指定的文件中。

参数:<文件指针>,<字符串>

源代码如下

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

#define FILE_OP_MODE_W "w"
#define FILE_OP_MODE_R "r"
int main (int argc, char *argv[])
{
        int ret = 0;
        FILE *fp = fopen(argv[1], FILE_OP_MODE_W);

        fputs("Hello World!", fp);
        fclose(fp);
        printf("ret = %d\n", ret);
        return ret;
}

 运行结果

C语言编程之文件操作,项目管理,C文件

4.1.14 fgets

功能:从指定文件中获取字符串

参数:<缓冲区>,<缓冲区长度>,<文件指针>

返回值:返回指向缓冲区首地址

源代码

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

#define FILE_OP_MODE_W "w"
#define FILE_OP_MODE_R "r"
#define LEN 20
int main (int argc, char *argv[])
{
        int ret = 0;
        char buf[20];
        FILE *fp = fopen(argv[1], FILE_OP_MODE_R);
        char *p = NULL;

        p = fgets(buf, sizeof(buf), fp);
        printf("%s", buf);
        printf("%s", p);
        fclose(fp);
        printf("ret = %d\n", ret);
        return ret;
}

运行结果

C语言编程之文件操作,项目管理,C文件

4.1.15 putw

该接口用于向指定的文件流中输出一个字大小的数据,默认情况下,该接口在C库中都有实现。

源代码

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

#define FILE_OP_MODE_W "w"
#define FILE_OP_MODE_R "r"

int rewrite_putw(int val, FILE *p);

int main (int argc, char *argv[])
{
        int ret = 0;
        FILE *fp = fopen(argv[1], FILE_OP_MODE_W);

        int val = 2;
//      putw(val, fp);
        rewrite_putw(val, fp);
        fclose(fp);
        printf("ret = %d\n", ret);
        return ret;
}


int rewrite_putw(int val, FILE *p)
{
        int ret = 0;
        char *cp = (char *)&val;
        int cnt = 0;
        while (cnt < sizeof(int)) {
                fputc(*cp, p);
                cp++;
                cnt++;
        }
        return ret;
}

运行结果

C语言编程之文件操作,项目管理,C文件

4.1.16 getw

从打开的文件流中获取一个字大小的数据。

源代码

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

#define FILE_OP_MODE_W "w"
#define FILE_OP_MODE_R "r"

int rewrite_getw(FILE *p);

int main (int argc, char *argv[])
{
        int ret = 0;
        FILE *fp = fopen(argv[1], FILE_OP_MODE_R);

        //ret = getw(fp);
        ret = rewrite_getw(fp);
        fclose(fp);
        printf("ret = %d\n", ret);
        return ret;
}


int rewrite_getw(FILE *p)
{
        int getVal = 0;
        char *cp = (char *)&getVal;
        int cnt = 0;
        while (cnt < sizeof(int)) {
                *cp =fgetc(p);
                cp++;
                cnt++;
        }
        return getVal;

}

运行结果

C语言编程之文件操作,项目管理,C文件文章来源地址https://www.toymoban.com/news/detail-725797.html

5 文件的定位

6 出错的检测

7 文件输入输出小结

到了这里,关于C语言编程之文件操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git的下载安装配置与上传文件以及命令 idea使用git项目版本操作管理

    Git - Downloads (git-scm.com) https://git-scm.com/downloads  下载速度比较慢,可以用迅雷下载,速度很快 我这里是用的压缩包版本,直接解压到要放的文件夹即可,文件名尽量不要使用中文,以防后续使用出现错误。  打开环境变量,在系统变Path,添加你的git安装路径/bin win+r输入cmd,

    2024年02月04日
    浏览(65)
  • 中文编程开发语言工具构件说明:屏幕截取构件的编程操作

    屏幕截取 用于截取指定区域的图像。 图    标: 构件类型:不可视 重要属性 l        截取类型 枚举型,设置在截取屏幕时的截取类型。包括:全屏幕、指定区域、活动窗口三种。当全屏幕截取时相当于执行了硬拷屏(PrintScreenSysRq键)功能;指定区域截取则是通过矩形

    2024年02月07日
    浏览(54)
  • 什么是硬件编程,C 语言如何进行硬件编程?C 语言常用的操作系统有哪些?

    硬件编程是指使用编程语言与硬件交互,控制硬件设备的行为和功能。其中,C语言是一种广泛用于硬件编程的高级编程语言。 C语言通过直接操作内存来进行硬件编程。它提供了一些特殊的和库函数,使得开发者可以直接访问和操作硬件设备的寄存器、端口和外设等。

    2024年02月15日
    浏览(54)
  • C语言编程学生成绩管理系统

    目录 一、介绍 二、功能 1.录入学生 2.删除学生信息 3.修改学生信息 4.查询学生信息 5.所有学生信息 6.成绩排序  7.退出程序 三、代码 1.主函数 2.头文件 3.函数封装库         利用C语言,运用链表、指针、封装函数等基本知识实现一个学生管理系统。通过在终端对学生信息进

    2024年02月10日
    浏览(52)
  • 中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例

    中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例 中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例。 软件功能: 1、系统设置:参数设定,账号及权限设置,系统初始化,卡类型设置,积分清零等。 2、会员信息登记:可以刷卡

    2024年02月07日
    浏览(56)
  • 中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例

    计时计费管理系统软件连接灯控器 计时计费管理系统软件连接灯控器编程案例

    2024年02月07日
    浏览(53)
  • C语言——多文件编程

    把函数声明放在头文件xxx.h中,在主函数中包含相应头文件 在头文件对应的xxx.c中实现xxx.h声明的函数 当一个项目比较大时,往往都是分文件,这时候有可能不小心把同一个头文件 include 多次,或者头文件嵌套包含。 为了避免同一个文件被include多次,C/C++中有两种方式。 方法

    2024年02月10日
    浏览(37)
  • Go 语言并发编程 及 进阶与依赖管理

    协程可以理解为 轻量级线程 ; Go更适 合高并发场景原因 之一: Go语言 一次可以创建上万协成 ; “快速”: 开多个协成 打印。 go func() : 在 函数前加 go 代表 创建协程 ; time.Sleep() : 协程阻塞,使主协程 在 子协程结束前阻塞不退出 ; 乱序输出 说明并行 ; 通过通信共享内

    2024年02月13日
    浏览(52)
  • PL/1语言 :上古伟大的操作系统IBM System/3603的开发编程语言

    PL/I (Programming Language One,发音为/pi /I w / n/,有时也写为PL/1)[1]是最初由IBM开发的一种过程式、命令式的计算机编程语言。它是为科学、工程、商业和系统编程而设计的。自20世纪60年代引入以来,它一直被学术、商业和工业组织不断使用。[2] PL/1 ANSI标准X3.53-1976于1976年发布。

    2024年02月01日
    浏览(38)
  • C语言编程之.H文件与.C文件的关系

    在C语言中,通常将程序的源代码分为.h文件和.c文件两类: .h文件(也称头文件)通常包含程序所需的函数、变量、类型和宏的声明,以便在其他文件中使用。 .c文件则包含这些函数、变量、类型和宏的实现或定义。 因此,可以将.h文件看作是对应的.c文件的接口或者声明文件

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包