龙空技术网

C语言文件处理

一代盐商 479

前言:

眼前看官们对“c语言文件怎么创建”可能比较注重,我们都需要剖析一些“c语言文件怎么创建”的相关文章。那么小编也在网络上网罗了一些对于“c语言文件怎么创建””的相关内容,希望看官们能喜欢,姐妹们一起来了解一下吧!

程序运行时,通常我们使用变量来存储数据,但在程序退出后数据丢失。文件就可以用于存储数据。文件处理包括打开、关闭、读取和写入文件。

打开文件

语法:

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

解释:

读,是从文件中读,从文件中读(输入)到内存中;

写,是写到文件中,从内存中写(输出)到文件中;

读,从文件中读,所以文件一定得存在,如果文件不存在,则报错;

写,写到文件中,所以文件可以不存在,如果文件不存在,则新建;

读,read,所以读简写就是r;

写,write,所以写简写就是w;

追加,append,所以追加方式就是a

mode参数

说明

打开文件不存在

r

以读取模式打开文本文件

出错

w

以写入模式打开文本文件

新建一个文件

a

以追加模式打开文本文件

新建一个文件

r+

以读写模式打开文本文件

出错

w+

以读写模式打开文本文件

新建一个文件

a+

以读写模式打开文本文件

新建一个文件

rb

以读取模式打开二进制文件

出错

wb

在写入模式下打开二进制文件

新建一个文件

ab

以追加模式打开二进制文件

新建一个文件

rb+

以读写模式打开二进制文件

出错

wb+

以读写模式打开二进制文件

新建一个文件

ab+

以读写模式打开二进制文件

新建一个文件

示例:

FILE *fp = NULL;fp = fopen("E:/c/test.txt", "w");
关闭文件

fclose()函数用于关闭文件

语法:

int fclose(FILE *fp);

示例:

#include <stdio.h>int main() {    // 打开文件    FILE *fp = NULL;    fp = fopen("E:/c/test.txt", "w");    // 关闭文件    fclose(fp);    return 0;}
输入输出文件

函数名

描述

使用场景

fgetc

字符输入

所有输入流

fputc

字符输出

所有输出流

fgets

字符串输入

所有输入流

fputs

字符串输出

所有输出流

fscanf

格式化输入

所有输入流

fprintf

格式化输出

所有输出流

fread

二进制输入

文件

fwrite

二进制输出

文件

fgetc函数

fgetc 是 file get char 的意思,从指定的文件中读取一个字符

语法:

int fgetc(FILE * fp);

解释:

fp为文件指针。fgetc() 读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回EOF

EOF 是 end of file 的缩写,表示文件末尾,是在 stdio.h 中定义的宏,它的值是一个负数,往往是 -1。

EOF 不绝对是 -1,也可以是其他负数,这要看编译器的实现。

示例:

#include <stdio.h>int main() {    // 1.打开文件    FILE *fp = NULL;    // test.txt内容为hello,world,只读方式打开    fp = fopen("E:/c/test.txt", "r");    // 如果文件不存在,给出提示并退出    if(fp == NULL) {        puts("Fail to open file!");        return 0;    }    // 2.读文件    int ch = 0;    // 每次读取一个字节,直到读取完毕    // 当文件内容访问完之后,返回EOF    while ((ch = fgetc(fp)) != EOF) {        putchar(ch);    }    // 输出换行符    putchar('\n');    // 3.关闭文件    fclose(fp);    fp = NULL;    return 0;}
fputc函数

fputc 是 file output char 的意思。向指定的文件中写入一个字符。

语法:

int fputc(int ch, FILE *fp);

解释:

ch 为要写入的字符,fp 为文件指针。

fputc() 写入成功时返回写入的字符,失败时返回 EOF,返回值类型为 int 也是为了容纳这个负数。

示例:

#include <stdio.h>int main() {    // 1.打开文件    FILE *fp = NULL;    char ch;    // test.txt文件不存在    fp = fopen("E:/c/test.txt", "w");    // 2. 从键盘输入字符,写到文件    printf("Input a string:\n");    while ((ch = (char)getchar()) != '\n') {        fputc(ch, fp);    }    // 3.关闭文件    fclose(fp);    fp = NULL;    return 0;}

程序每次从键盘读取一个字符并写入文件,直到按下回车键,while 条件不成立,结束读取。

1 被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,并将写入的字符放在文件开头。如需保留原有文件内容,并把写入的字符放在文件末尾,就必须以追加方式打开文件。不管以何种方式打开,被写入的文件若不存在时则创建该文件。

2 每写入一个字符,文件内部位置指针向后移动一个字节。

fputs函数

fputs()函数将一行字符串写入文件,它将字符串输出到流。

语法:

int fputs(const char *s, FILE *fp)

解释:

函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它返回一个非负值,如果发生错误,则返回 EOF。

示例:

#include <stdio.h>int main() {    // 1.打开文件    FILE *fp = NULL;    // test.txt文件不存在    fp = fopen("E:/c/test.txt", "w");    // 2.写入文件    fputs("hello,world", fp);    // 3.关闭文件    fclose(fp);    fp = NULL;    return 0;}
fgets函数

fgets()函数从文件中读取一行字符串,它从流中获取字符串。

语法:

char* fgets(char *s, int n, FILE *fp)

解释:

函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。

示例:

#include <stdio.h>int main() {    // 1.打开文件    FILE *fp = NULL;    char ch[255];    // test.txt文件不存在    fp = fopen("E:/c/test.txt", "r");    // 2.从文件中读取    fgets(ch, 255, fp);    printf("%s", ch);    // 3.关闭文件    fclose(fp);    fp = NULL;    return 0;}
fprintf函数

fprintf()函数用于将一组字符写入文件。它将格式化的输出发送到流。

语法:

int fprintf ( FILE *fp, char * format, ... );

解释:

fp 为文件指针,format 为格式控制字符串,... 表示参数列表。与 scanf() 和 printf() 相比,它们仅仅多了一个 fp 参数。

示例:

#include <stdio.h>int main() {    // 1.打开文件    FILE *fp = NULL;    // test.txt文件不存在    fp = fopen("E:/c/test.txt", "w");    // 2.从文件中读取    fprintf(fp, "hello,world");    // 3.关闭文件    fclose(fp);    fp = NULL;    return 0;}
fscanf函数

fscanf()函数用于从文件中读取一组字符。它从文件读取一个单词,并在文件结尾返回EOF

语法:

int fscanf(FILE *fp, const char *format [, argument, ...])

示例:

#include <stdio.h>int main() {    FILE *fp = NULL;    char buff[255];    fp = fopen("E:/c/test.txt", "r");    while (fscanf(fp, "%s", buff) != EOF) {        printf("%s ", buff);    }    fclose(fp);    fp = NULL;    return 0;}
fwrite函数

语法:

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

解释:

ptr -- 这是指向要被写入的元素数组的指针。size -- 这是要被写入的每个元素的大小,以字节为单位。nmemb -- 这是元素的个数,每个元素的大小为 size 字节。stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

示例:

#include<stdio.h>int main() {    FILE *fp;    char str[] = "hello,world";    fp = fopen("E:/c/test.txt", "wb");    fwrite(str, sizeof(str), 1, fp);    fclose(fp);    return (0);}

fwrite写到文件里,配套用fread从文件中读取,否则可能会读取不到准确的结果。

fread函数

从文件中读取若干字节数据到内存缓冲区中

语法:

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

解释:

void *buffer 参数 : 将文件中的二进制数据读取到该缓冲区中 ;size_t size 参数 : 读取的 基本单元 字节大小 , 单位是字节 , 一般是 buffer 缓冲的单位大小 ;如果 buffer 缓冲区是 char 数组 , 则该参数的值是 sizeof(char) ;如果 buffer 缓冲区是 int 数组 , 则该参数的值是 sizeof(int) ; size_t count 参数 : 读取的 基本单元 个数 ;FILE *stream 参数 : 文件指针 ;size_t 返回值 : 实际从文件中读取的 基本单元 个数 ; 读取的字节数是 基本单元数 * 基本单元字节大小 ;

示例:

#include<stdio.h>int main() {    FILE *fp;    char str[200] = {0};    fp = fopen("E:/c/test.txt", "rb");    fread(str, sizeof(char), sizeof(str), fp);    printf("%s\n", str);    fclose(fp);    return (0);}
文件位置指针函数ftell函数

ftell()函数返回指定流的当前文件指针的位置。在文件末尾移动文件指针后,我们可以使用ftell()函数获取文件的总大小。可以使用SEEK_END常量来将文件指针移动文件末尾。

语法:

long int ftell(FILE *stream)

示例:

#include<stdio.h>int main() {    FILE *fp;    int length;    fp = fopen("E:/c/test.txt", "r");    fseek(fp, 0, SEEK_END);    length = ftell(fp);    fclose(fp);    printf("Size of file: %d bytes", length);    return (0);}
rewind函数

让文件指针的位置回到文件的起始位置。

语法:

void rewind(FILE *stream)
fseek函数

fseek()函数用于将文件指针设置为指定的偏移量。

语法:

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

解释:

fseek()函数中有3个常量用于whence参数的值,分别为:SEEK_SETSEEK_CURSEEK_END

文件读取结束判定ferror函数

判断是否由于发生错误而结束读取。若读取错误而结束,该函数返回一个非零值,否则返回一个零值。

feof函数

判断是否遇到文件结束而结束读取。若遇到文件结束标志而结束读取,该函数返回一个非零值,否则返回零。

if (ferror(fp)) {    printf("发生错误而结束读取!");}if (!feof(fp)) {    printf("没有遇到文件结束标志!");}

标签: #c语言文件怎么创建