首页 > 代码库 > C语言 文件
C语言 文件
小白一个,看到有错误,希望指出,万分感谢
/****************************************************************
C语言文件概述:
一般文件可分为二进制文件和文本文件。
约定:我们把数据在终端上的表现形式称为数据的终端形式,而不
称为字符形式。
注:终端是指键盘 显示器等和用户直接打交道的输入输出设备。
二进制文件是把内存中的书按其在内存中的储存形式原样输出到磁
盘上存放,也就是说存放的是数据的原样式。
文本文件是把数据终端形式的二进制数据输出到磁盘上存放,也就
是说存放的是数据的终端形式。
****************************************************************/
/*文件打开函数: fopen 函数
* 原型是 FILE * fopen(char * filename, char * mode);
* 参数: fileopen 表示指定文件名称 mode 指打开文件的方式
*文件关闭函数: fclose(文件指针)
* fclose函数也带回一个值,顺利的执行了关闭操作,返回值为0,否则
* 返回值为 EOF(-1)。
*注意:
* (1)除非有其他说明,输入又叫读,是指从文件(外存)输入到内存
* 输出又叫写 是指从内存输出到外存。
* (2)如果不能实现打开任务,fopen函数将会带回一个出错信息。
* 此时fopen函数将会带回一个空指针值 NULL
* NULL 在stdio.h 文件中已经被定义为 0
* 常用下面的方法打开一个文件
* if (fp = fopen("filename", "r")) == NULL)
* {
* printf("cannot open this file\n");
* exit(0); // 或者 return;
* }
* (3)在程序开始运行时,系统自动打开3个标准文件:标准输出 标准
* 输入 标准出错输出。通常这三个文件都与终端相联系。因此从
* 终端输入或向终端输出都不需要打开终端文件。系统自动定义了
* 3个文件指针stdin stdout stderr,分别指子向终端输入 终端输
* 出 标准出错输出。
*/
// fscanf fprintf 用于文本的格式化输入输出
// 一般调用形式为 fscanf 或 fprintf(文件指针,格式字符串,输入或输出列表)
// 文件测试 文件的读写
# include <stdio.h>
typedef struct student
{
int code;
char name[10];
int age;
}St;
int main(void)
{
FILE * out;
int i;
St a[2];
// 检查打开操作是否出错
if ((out = fopen("student.dat", "w+")) == NULL)
printf("Cannot open output file.");
for (i = 0; i < 2; ++i)
{
// 使用scanf也可以实现此功能
fscanf(stdin, "%d%s%d", &a[i].code, &a[i].name, &a[i].age);
fprintf(out, "%d%s%d\n", a[i].code, a[i].name, a[i].age);
}
fclose(out);
return 0;
}
/*
运行结果:
1 王小林 18
2 斯大林 99
--------------------------------
Process exited after 29.82 seconds with return value 0
请按任意键继续. . .
并且在此程序文件的文件夹中生成了一个名为 student.dat 的文件。
*/
/*
fread 和 fwrite 函数用于和二进制文件相关的输入和输出
一般调用形式为 :
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
参数说明:
buffer是一个指针,对于fread来说,它是读入数据的
地址。对于fwrite来说它是要输出数据的地址。
size是要读写的字节数。
count是要读写size字节数据的个数
fp是文件类型指针
*/
# include <stdio.h>
typedef struct student
{
int code;
char name[10];
int age;
}St;
int main(void)
{
FILE * out, * in;
int i;
St a[2] = {{1, "www", 18}, {2, "hhh", 99}};
if ((out = fopen("stu.dat", "wb")) == NULL)
printf("Cannot open output file.");
for (i = 0; i < 2; ++i)
{
fwrite(&a[i], sizeof(St), 1, out);
}
fclose(out);
if ((in = fopen("stu.dat", "rb")) == NULL)
printf("Cannot open input file.");
for (i = 0; i < 2; ++i)
{
fread(&a[i], sizeof(St), 1, in);
printf("%d, %3s, %d\n", a[i].code, a[i].name, a[i].age);
}
fclose(in);
return 0;
}
/*
运行结果:
1, www, 18
2, hhh, 99
--------------------------------
Process exited after 0.0915 seconds with return value 0
请按任意键继续. . .
*/
/*
fgetc函数和 fputc函数 可用于读写文本文件或二进制文件
注意:fgetc函数和 fputc函数读写字节级别(每次1字节)的
数据,因此,fgetc函数和 fputc函数读写二进制文件的时候
可以通过多次操作从而实现对任意数据类型的数据的读写。
fgetc函数一般调用形式
字符变量 = fgetc(文件指针);
fputc函数一般调用形式
fputc(字符, 文件指针);
此处字符可以是任何数据类型的一个字节的部分数据。
*/
# include <stdio.h>
# include <stdlib.h>
int main(void)
{
FILE * fp;
char ch;
if ((fp = fopen("out.dat", "w")) == NULL)
printf("Cannot open file.");
ch = getchar();
while (ch != ‘#‘)
{
fputc(ch, fp);
ch = getchar();
}
fclose(fp);
return 0;
}
/*
运行结果:
w
w
e
3
#
--------------------------------
Process exited after 7.194 seconds with return value 0
请按任意键继续. . .
*/
C语言 文件