C 语言文件输入/输出
一个文件代表磁盘上存储一组相关数据的字节序列。文件是为永久存储数据而创建的。这是一个现成的结构。
在 C 语言中,我们使用文件类型的结构指针来声明一个文件。
FILE *fp;
c 提供了许多有助于执行基本文件操作的功能。以下是功能,
| 功能 | 描述 | | fopen() | 创建新文件或打开现有文件 | | fclose() | 关闭文件 | | getc() | 从文件中读取字符 | | putc() | 将字符写入文件 | | fscanf() | 从文件中读取一组数据 | | fprintf() | 将一组数据写入文件 | | getw() | 从文件中读取整数 | | 普托() | 将整数写入文件 | | fseek() | 将位置设置为所需的点 | | ftell() | 给出文件中的当前位置 | | 倒带() | 将位置设置为起点 |
打开文件或创建文件
fopen()
功能用于创建新文件或打开现有文件。
一般语法:
*fp = FILE *fopen(const char *filename, const char *mode);
这里,*fp
是文件指针(FILE *fp
),它将保存对打开(或创建)文件的引用。
文件名是要打开的文件的名称,模式指定打开文件的目的。模式可以是以下类型:
| 方式 | 描述 | | r | 以阅读模式打开文本文件 | | w | 以书写模式打开或创建文本文件。 | | a | 以追加模式打开文本文件 | | r+ | 以读写模式打开文本文件 | | w+ | 以读写模式打开文本文件 | | a+ | 以读写模式打开文本文件 | | 元素铷的符号 | 以读取模式打开二进制文件 | | 世界银行 | 以写入模式打开或创建二进制文件 | | 腹肌 | 以追加模式打开二进制文件 | | rb+ | 以读写模式打开二进制文件 | | wb+ | 以读写模式打开二进制文件 | | ab+ | 以读写模式打开二进制文件 |
关闭文件
fclose()
功能用于关闭已经打开的文件。
一般语法:
int fclose( FILE *fp);
这里fclose()
功能关闭文件,成功返回零,如果关闭文件有错误则返回 EOF 。这个 EOF 是头文件 stdio.h 中定义的常量。
文件的输入/输出操作
在上表中,我们讨论了执行文件读写的各种文件输入/输出功能。getc()
和putc()
是最简单的函数,可以用来读写文件中的单个字符。
#include<stdio.h>
int main()
{
FILE *fp;
char ch;
fp = fopen("one.txt", "w");
printf("Enter data...");
while( (ch = getchar()) != EOF) {
putc(ch, fp);
}
fclose(fp);
fp = fopen("one.txt", "r");
while( (ch = **getc**(fp)! = EOF)
printf("%c",ch);
// closing the file pointer
fclose(fp);
return 0;
}
使用fprintf()
和fscanf()
读取和写入文件
#include<stdio.h>
struct emp
{
char name[10];
int age;
};
void main()
{
struct emp e;
FILE *p,*q;
p = fopen("one.txt", "a");
q = fopen("one.txt", "r");
printf("Enter Name and Age:");
scanf("%s %d", e.name, &e.age);
fprintf(p,"%s %d", e.name, e.age);
fclose(p);
do
{
fscanf(q,"%s %d", e.name, e.age);
printf("%s %d", e.name, e.age);
}
while(!feof(q));
}
在这个程序中,我们创建了两个文件指针,它们都指向同一个文件,但是模式不同。
fprintf()
功能直接写入文件,而fscanf()
从文件中读取,然后可以使用标准的printf()
功能打印在控制台上。
追加模式和写入模式的区别
写(w)模式和追加(a)模式,而打开文件几乎是一样的。两者都用于写入文件。在这两种模式下,如果新文件还不存在,就会创建新文件。
它们唯一的区别是,当你在写模式下打开一个文件时,文件被重置,导致文件中已经存在的任何数据被删除。在附加模式下,这不会发生。追加模式用于向文件的现有数据(如果有)追加或添加数据。因此,当您在追加(a)模式下打开一个文件时,光标位于文件中当前数据的末尾。
二进制文件的读写
二进制文件类似于文本文件,但它只包含大的数字数据。在上面的打开模式表中提到了打开模式。
fread()
和fwrite()
函数用来读写的是二进制文件。
fwrite(data-element-to-be-written, size_of_elements, number_of_elements, pointer-to-file);
fread()
也是用同样的方式,用同样的参数像fwrite()
函数。下面提到的是一个写入二进制文件的简单例子
const char *mytext = "The quick brown fox jumps over the lazy dog";
FILE *bfp= fopen("test.txt", "wb");
if (bfp)
{
fwrite(mytext, sizeof(char), strlen(mytext), bfp);
fclose(bfp);
}
fseek()
、ftell()
和rewind()
功能
fseek()
:用于使用 fseek 功能将读数控件移动到不同的位置。ftell()
:告知文件指针中光标当前位置的字节位置。rewind()
:将控件移动到文件开头。