C语言打开文件夹1001无标题,C语言-文件操作详解

C文件概述

1、所谓“文件”是指一组相关数据的有序集合。

2、这个数据集合有一个名称,叫做文件名

3、文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来

4、操作系统是以文件为单位对数据进行管理的

文件分类

1、从用户观点:

a) 特俗文件(标准输入输出文件或标准设备文件)

b) 普通文件(磁盘文件)

2、从操作系统的角度看,每个与主机相连的输入、输出设备看作是一个文件

3、按数据的组织形式:

a) ASCII文件(文本文件):每一个字节放一个ASCII代码

b) 二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放

C语言对文件的处理方法

缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。用缓冲文件系统进行的输入输出又称为高级磁盘输入输出。

非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。用非缓冲文件系统进行的输入输出又称为低级输入输出系统。

文件的打开与关闭

1、文件的打开(fopen函数)

2、文件的关闭(fclose函数)

函数功能:使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作

返回值:关闭成功返回值为0;否则返回EOF(-1)

使用文件的方式共有12种,下面给出了它们的符号和意义。

文件使用方式

意义

“r”

只读打开一个文本文件,只允许读数据

“w”

只写打开或建立一个文本文件,只允许写数据

“a”

追加打开一个文本文件,并在文件末尾写数据

“rb”

只读打开一个二进制文件,只允许读数据

“wb”

只写打开或建立一个二进制文件,只允许写数据

“ab”

追加打开一个二进制文件,并在文件末尾写数据

“r+”

读写打开一个文本文件,允许读和写

“w+”

读写打开或建立一个文本文件,允许读写

“at+”

读写打开一个文本文件,允许读,或在文件末追加数据

“rb+”

读写打开一个二进制文件,允许读和写

“wb+”

读写打开或建立一个二进制文件,允许读和写

“ab+”

读写打开一个二进制文件,允许读,或在文件末追加数据

文件的读写

字符读写函数: fgetc 和fputc

1、在文件内部有一个位置指针,用来指向文件的当前读写字节

2、在文件打开时,该指针总是指向文件的第一个字节,只用fgetc函数后,该位置指针将向后移动一个字节,因此可连续多次使用fgetc函数,读取多个字符

3、文件指针和未见内部的位置指针不是一回事

4、文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的

5、文件内部的位置指针用以知识文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需要在程序中定义说明,而是由系统自动设置的

fputc(ch, fp);

函数功能: 将字符(ch的值)输出到fp所指向的文件中去

/*

2011年09月21日21:54:59

功能:

字符读写函数: fgetc 和fputc

fputc(ch, fp);

函数功能: 将字符(ch的值)输出到fp所指向的文件中去

*/

#include 

#include 

void main()

{

FILE * fp;

char ch, filename[20];

printf("Please input the filename you want to write:");

scanf("%s", filename);

if(!(fp = fopen(filename, "wt++"))) //  文件的打开(fopen函数);“wt+” 读写打开或建立一个文本文件,允许读写

{

printf("Cannot open the file!\n");

exit(0);//终止程序

}

printf("Please input the sentences you want to write:");

ch = getchar();

ch = getchar();

while( ch != EOF) //EOF为文件结束

{

fputc(ch, fp); //fputc(ch, fp); 函数功能: 将字符(ch的值)输出到fp所指向的文件中去

ch = getchar();

}

fclose(fp);

}

/*

2011年09月21日22:23:29

*/

#include 

#include 

void main()

{

FILE * fp;

char ch, filename[20];

printf("Please input the filename you want to write:");

scanf("%s", filename);

if(!(fp = fopen(filename, "r"))) //  文件的打开(fopen函数);“wt+” 读写打开或建立一个文本文件,允许读写

{

printf("Cannot open the file!\n");

exit(0);//终止程序

}

while( ch != EOF) //EOF为文件结束EOF也就等价于-1表示读到文件末尾了 或者说 是 文件的结束符

{

ch = fgetc(fp);

putchar(ch); //putchar();用于把ch显示在屏幕上

}

fclose(fp);

}

/*

2011年09月25日13:03:29

功能:

完成文本文件的复制

*/

#include 

#include 

int main(void)

{

FILE *in, *out;

char infile[10];

char outfile[10];

char c;

printf("enter the infile name:\n");

scanf("%s", infile);

printf("enter the outfile name:\n");

scanf("%s", outfile);

if( (in=fopen(infile, "r")) == NULL ) //   “r” 只读打开一个文本文件,只允许读数据

exit(0);

if( (out=fopen(outfile, "w")) == NULL ) //   “w” 只写打开或建立一个文本文件,只允许写数据

exit(0);

c=fgetc(in); //fgetc(), getc() 从指定文件取得一个字符

while(!feof(in)) //文件状态 feof() 若到文件末尾,函数值为真

{

fputc(c, out); //fputc(), putc() 把字符输出到指定文件

c=fgetc(in);

}

fclose(in);

fclose(out);

return 0;

}

/*

2011年09月25日13:10:03

功能:

完成二进制文件的复制

*/

#include 

#include 

int main(void)

{

FILE *in, *out;

char infile[10];

char outfile[10];

char c;

printf("enter the infile name:\n");

scanf("%s", infile);

printf("enter the outfile name:\n");

scanf("%s", outfile);

if( (in=fopen(infile, "rb")) == NULL ) //     “rb”    只读打开一个二进制文件,只允许读数据

exit(0);

if( (out=fopen(outfile, "wb")) == NULL ) //      “wb”    只写打开或建立一个二进制文件,只允许写数据

exit(0);

c=fgetc(in); //fgetc(), getc() 从指定文件取得一个字符

while(!feof(in)) //文件状态 feof() 若到文件末尾,函数值为真

{

fputc(c, out); //fputc(), putc() 把字符输出到指定文件

c=fgetc(in);

}

fclose(in);

fclose(out);

return 0;

}

字符串读写函数:fgets和fputs

1、只能处理文本文件,不能处理二进制文件

2、返回值:

1. 输入成功:返回值为0;

2. 输入失败:返回EOF;

例一:字符串写入:

/*

2011年09月22日21:52:25

字符串读写函数:fgets和fputs

返回值:

1. 输入成功:返回值为0;

2. 输入失败:返回EOF;

*/

#include 

#include 

#define LEN 11;

void main()

{

FILE * fp;

char buffer[30], ch;

if( !(fp = fopen("qintangtao.txt", "at+")) ) //   “at+” 读写打开一个文本文件,允许读,或在文件末追加数据 文件指针指向了文件的结尾处

{

printf("\nCannot open file strike any key exit!");

exit(1);

}

printf("Please input a string:\n");

// scanf("%s", buffer);  // 用scanf();接收时 当遇到 空格、换行 就认为结束了

fgets(buffer, 30, stdin); //为什么不用scanf()? stdin又是什么?

fputs(buffer, fp);

rewind(fp); //重新定义文件内部指针指向文件的开头处

ch = fgetc(fp);

while( ch != EOF )

{

putchar(ch); //输出到屏幕上

ch = fgetc(fp);

}

printf("\n");

fclose(fp);

system("pause");

}

例二:字符串读出

/*

2011年09月22日19:40:44

总结:

字符串读写函数:fgets和fputs

*/

#include 

#include 

#define LEN 11;

void main()

{

FILE * fp;

char buffer[11];

if( !(fp = fopen("qintangtao.txt", "rt")) ) //是否能够打开文件

{

printf("\nCannot open file strike any key exit!");

exit(1);

}

fgets(buffer, 11, fp); //从fp中读出11个字节存放在buffer中

printf("%s\n", buffer);

fclose(fp);

system("pause");

}

/*

2011年09月25日14:05:49

功能:

输入学生的信息存入student.txt文件中

*/

#include 

#include 

int main(void)

{

FILE * fp;

char student[50];

int i;

//scanf("%s", student); // 当输入1001 tom 92.3时 只能把1001存入文件中 因为在遇到空格时scanf就把它当成了结束的标记 所以要用下面的 gets(student); 来进行输入

if( (fp=fopen("student.txt", "w"))==NULL )

exit(0);

for(i=0; i<3; i++)

{

gets(student);

fputs(student, fp); //整行的存入文件中

fputs("\n", fp); //换行

}

return 0;

}

/*

2011年09月25日14:17:13

功能:

从student.txt文件中读取数据并显示在屏幕上

*/

#include 

#include 

int main(void)

{

FILE * fp;

char string[80];

if( (fp=fopen("student.txt", "r"))==NULL )

exit(0);

while( fgets(string, 80, fp)!=NULL )

{

//printf("%s", string); //也可以用下面的方法将内容显示在屏幕上

fputs(string, stdout); //stdout函数是将内容显示到屏幕上

}

return 0;

}

数据块(二进制文件的)读写函数:fread和fwrite

函数调用:

fread(buffer, size, count, fp);

fwrite(buffer, size, count, fp);

参数说明:

buffer: 是一个指针

对fread来说,它是读入数据的存放地址

对fwrite来说,是要输出数据的地址(均指起始地址)

size: 要读写的字节数

count:要进行读写多少个size字节的数据项

fp:文件指针

例一:数据块写入:

/*

2011年09月22日23:01:25

总结:

函数调用:

fread(buffer, size, count, fp);

fwrite(buffer, size, count, fp);

参数说明:

buffer: 是一个指针

对fread来说,它是读入数据的存放地址

对fwrite来说,是要输出数据的地址(均指起始地址)

size: 要读写的字节数

Count:要进行读写多少个size字节的数据项

fp:文件的指针

*/

#include 

#define SIZE 4

struct student

{

char name[10];

int num;

int age;

char addr[15];

}stu[SIZE];

void save()

{

FILE *fp;

int i;

if( !(fp = fopen("student-list", "wb")) ) // “wb” 只写打开或建立一个二进制文件,只允许写数据

{

printf("Cannot open the file!\n");

return;

}

for( i=0; i

{

if( fwrite(&stu[i], sizeof(struct student), 1, fp) !=1 )  //fwrite(buffer, size, count, fp);

{

printf("File write error!\n");

fclose(fp);

}

}

}

void main()

{

int i;

printf("Please input the student's name, num, age and address: \n");

for ( i=0; i

{

scanf("%s %d %d %s", &stu[i].name, &stu[i].num, &stu[i].age, &stu[i].addr );

}

save();

}

例二:数据块读出:

/*

2011年09月22日23:03:30

总结:

函数调用:

fread(buffer, size, count, fp);

fwrite(buffer, size, count, fp);

参数说明:

buffer: 是一个指针

对fread来说,它是读入数据的存放地址

对fwrite来说,是要输出数据的地址(均指起始地址)

size: 要读写的字节数

Count:要进行读写多少个size字节的数据项

fp:文件的指针

*/

#include 

#define SIZE 4

struct student

{

char name[10];

int num;

int age;

char addr[15];

}stu[SIZE];

//函数声明

void load();

void main()

{

int i;

load();

printf("      name     num    age      adress\n\n");

for ( i=0; i

{

printf("%10s %5d %5d %10s \n", &stu[i].name, &stu[i].num, &stu[i].age, &stu[i].addr );

}

}

void load()

{

FILE *fp;

int i;

if( !(fp = fopen("student-list", "r")) )

{

printf("Cannot open the file!\n");

return;

}

for( i=0; i

{

fread(&stu[i], sizeof(struct student), 1, fp); //fread(buffer, size, count, fp);

}

fclose(fp);

};

/*

2011年09月25日20:10:22

功能:

据块(二进制文件的)读写函数:fread和fwrite

函数调用:

fread(buffer, size, count, fp);

fwrite(buffer, size, count, fp);

参数说明:

buffer: 是一个指针

对fread来说,它是读入数据的存放地址

对fwrite来说,是要输出数据的地址(均指起始地址)

size: 要读写的字节数

count:要进行读写多少个size字节的数据项

fp:文件指针

*/

#include 

#include 

struct student

{

long num;

char name[10];

int age;

} s[4];

int main(void)

{

FILE * fp;

int i;

if( (fp=fopen("student.dat", "w+")) == NULL ) //  “w+”读写打开或建立一个文本文件,允许读写

exit(0);

for(i=0; i<4; i++)

{

printf("第%d个学生:\n", i+1);

printf("学号:");

scanf("%ld", &s[i].num);

printf("姓名:");

scanf("%s", s[i].name);

printf("年龄:");

scanf("%d", &s[i].age);

//fwrite(&s, sizeof(struct student), 1, fp); // fwrite(buffer, size, count, fp);

}

fwrite(s, sizeof(struct student), 4, fp);

rewind(fp); //文件内部指针指向第一个字节

// for(j=0; j<4; j++)

// {

// fread(&s, sizeof(struct student), 1, fp); // fread(buffer, size, count, fp);

// printf("%ld %

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值