搜档网
当前位置:搜档网 › C语言文件操作

C语言文件操作

C语言文件操作
C语言文件操作

C语言中没有输入输出语句,所有的输入输出功能都用ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:

文件的打开操作 fopen 打开一个文件

文件的关闭操作 fclose 关闭一个文件

文件的读写操作 fgetc 从文件中读取一个字符

fputc 写一个字符到文件中去

fgets 从文件中读取一个字符串

fputs 写一个字符串到文件中去

fprintf 往文件中写格式化数据

fscanf 格式化读取文件中数据

fread 以二进制形式读取文件中的数据

fwrite 以二进制形式写数据到文件中去

getw 以二进制形式读取一个整数

putw 以二进制形式存贮一个整数

文件状态检查函数 feof 文件结束

ferror 文件读/写出错

clearerr 清除文件错误标志

ftell 了解文件指针的当前位置

文件定位函数 rewind 反绕

fseek 随机定位

文件的打开

1.函数原型

FILE *fopen(char *pname,char *mode)

2.功能说明

按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理:

(1)此时如mode 规定按写方式打开文件,就按由pname指定的名字建立一个新文件;

(2)此时如mode 规定按读方式打开文件,就会产生一个错误。

打开文件的作用是:

(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;

(2)开辟一个缓冲区;

(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;FILE *:指出fopen是一个返回文件类型的指针函数;

3.参数说明

pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式见表8.1

4.返回值

正常返回:被打开文件的文件指针。

异常返回:NULL,表示打开操作不成功。

例如:

/* 定义一个名叫fp文件指针 */

FILE *fp;

/* 判断按读方式打开一个名叫test的文件是否失败 */

if((fp=fopen("test","r"))==NULL){

/* 打开操作不成功 */

printf("The file can not be opened.\n");

/* 结束程序的执行 */

exit(1);

}

要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout 和标准出错stderr。

文件的关闭

1.函数原型

int fclose(FILE *fp);

2.功能说明

关闭由fp指出的文件。此时调用操作系统提供的文件关闭功能,关闭由

fp->fd指出的文件;释放由fp指出的文件类型结构体变量;返回操作结果,即0或EOF。

3.参数说明

fp:一个已打开文件的文件指针。

4.返回值

正常返回:0。

异常返回:EOF,表示文件在关闭时发生错误。

例如:

int n;

n=fclose(fp);

文件的读写操作

A. 从文件中读取一个字符

1.函数原型

int fgetc(FILE *fp);

2.功能说明

从fp所指文件中读取一个字符。

3.参数说明

fp:这是个文件指针,它指出要从中读取字符的文件。

4.返回值

正常返回:返回读取字符的代码。

非正常返回:返回EOF。例如,要从"写打开"文件中读取一个字符时,会发生错误而返回一个EOF。

5.实例

【例8.1】显示指定文件的内容。

程序名为:display.c

执行时可用:display filename1 形式的命令行运行。显示文件filename1中的内容。例如,执行命令行display display.c将在屏幕上显示display的原代码。

/* File display program. */

#include

main(int argc,char *argv[]) /* 命令行参数 */

{ int ch;

/* 定义文件类型指针 */

FILE *fp;

/* 判断命令行是否正确 */

if(argc!=2)

{ printf("Error format,Usage: display filename1\n");

exit(1); /* 键入了错误的命令行,结束程序的执行 */

}

/* 按读方式打开由argv[1]指出的文件 */

if((fp=fopen(argv[1],"r"))==NULL){

/* 打开操作不成功 */

printf("The file <%s> can not be opened.\n",argv[1]);

/* 结束程序的执行 */

exit(1);

}

/* 成功打开了argv[1]所指文件 */

ch=fgetc(fp); /* 从fp所指文件的当前指针位置读取一个字符 */ while(ch!=EOF) /* 判断刚读取的字符是否是文件结束符 */

{ putchar(ch); /* 若不是结束符,将它输出到屏幕上显示 */ ch=fgetc(fp); /* 继续从fp所指文件中读取下一个字符 */

} /* 完成将fp所指文件的内容输出到屏幕上显示 */

fclose(fp); /* 关闭fp所指文件 */

}

B. 写一个字符到文件中去

1.函数原型

int fputc(int ch,FILE *fp)

2.功能说明

把ch中的字符写入由fp指出的文件中去。

3.参数说明

ch:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。

fp:这是个文件指针,指出要在其中写入字符的文件。

4.返回值

正常返回:要写入字符的代码。

非正常返回:返回EOF。例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。

5.实例

【例8.2】将一个文件的内容复制到另一个文件中去。

程序名为:copyfile.c

执行时可用:copyfile filename1 filename2形式的命令行运行,将文件filename1中的内容复制到文件filename2中去。

/* file copy program. */

#include

main(int argc,char *argv[]) /* 命令行参数 */

{ int ch;

FILE *in,*out; /* 定义in和out两个文件类型指针 */

if(argc!=3) /* 判断命令行是否正确 */

{ printf("Error in format,Usage: copyfile filename1

filename2\n");

exit(1); /* 命令行错,结束程序的执行 */

}

/* 按读方式打开由argv[1]指出的文件 */

if((in=fopen(argv[1],"r"))==NULL)

{ printf("The file <%s> can not be opened.\n",argv[1]);

exit(1); /* 打开失败,结束程序的执行 */

}

/* 成功打开了argv[1]所指文件,再 */

/* 按写方式打开由argv[2]指出的文件 */

if((out=fopen(argv[2],"w"))==NULL)

{ printf("The file %s can not be opened.\n",argv[2]);

exit(1); /* 打开失败,结束程序的执行 */

}

/* 成功打开了argv[2]所指文件 */

ch=fgetc(in); /* 从in所指文件的当前指针位置读取一个字符 */ while(ch!=EOF) /* 判断刚读取的字符是否是文件结束符 */

{ fputc(ch,out); /* 若不是结束符,将它写入out所指文件 */ ch=fgetc(in); /* 继续从in所指文件中读取下一个字符 */

} /* 完成将in所指文件的内容写入(复制)到out所指文件中 */ fclose(in); /* 关闭in所指文件 */

fclose(out); /* 关闭out所指文件 */

}

【例8.3】按十进制和字符显示文件代码,若遇不可示字符就用井号"#"字符代替之。

程序名为:dumpf.c

执行时可用:dumpf filename1 形式的命令行运行。

/* File dump program. */

#include

main(int argc,char *argv[])

{ char str[9];

int ch,count,i;

FILE *fp;

if(argc!=2)

{ printf("Error format,Usage: dumpf filename\n");

exit(1);

}

if((fp=fopen(argv[1],"r"))==NULL)

{ printf("The file %s can not be opened.\n",argv[1]);

exit(0);

}

count=0;

do{ i=0;

/*按八进制输出第一列,作为一行八个字节的首地址*/

printf("%06o: ",count*8);

do{

/* 从打开的文件中读取一个字符 */

ch=fgetc(fp);

/* 按十进制方式输出这个字符的ASCII码 */

printf("%4d",ch);

/* 如果是不可示字符就用"#"字符代替 */

if(ch<' '||ch>'~') str[i]='#';

/* 如果是可示字符,就将它存入数组str以便形成字符串 */ else str[i]=ch;

/* 保证每一行输出八个字符 */

if(++i==8) break;

}while(ch!=EOF); /* 遇到文件尾标志,结束读文件操作 */

str[i]='\0'; /* 在数组str加字符串结束标志 */

for(;i<8;i++) printf(" "); /* 一行不足八个字符用空格填充 */

printf(" %s\n",str); /* 输出字符串 */

count++; /* 准备输出下一行 */

}while(ch!=EOF); /* 直到文件结束 */

fclose(fp); /* 关闭fp所指文件 */

}

C. 从文件中读取一个字符串

1.函数原型

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

2.功能说明

从由fp指出的文件中读取n-1个字符,并把它们存放到由str指出的字符数组中去,最后加上一个字符串结束符'\0'。

3.参数说明

str:接收字符串的内存地址,可以是数组名,也可以是指针。

n:指出要读取字符的个数。

fp:这是个文件指针,指出要从中读取字符的文件。

4.返回值

正常返回:返回字符串的内存首地址,即str的值。

非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要从"写打开"文件中读取字符串,将发生错误而返回一个NULL值。

D. 写一个字符串到文件中去

1.函数原型

int fputs(char *str,FILE *fp)

2.功能说明

把由str指出的字符串写入到fp所指的文件中去。

3.参数说明

str:指出要写到文件中去的字符串。

fp:这是个文件指针,指出字符串要写入其中的文件。

4.返回值

正常返回:写入文件的字符个数,即字符串的长度。

非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要往一个"读打开"文件中写字符串时,

会发生错误而返回一个NULL值。

5.实例

【例8.4】以下程序将一个文件的内容附加到另一个文件中去。

设下面这个程序名为:linkfile.c

执行时可用:linkfile filename1 filename2形式的命令行运行,将文件filename2的内容附加在文件filename1之后。

/* file linked program. */

#include

#define SIZE 512

main(int argc,char *argv[])

{ char buffer[SIZE];

FILE *fp1,*fp2;

if(argc!=3)

{ printf("Usage: linkfile filename1 filename2\n");

exit(1);

}

/* 按追加方式打开argv[1] 所指文件 */

if((fp1=fopen(argv[1],"a"))==NULL)

{ printf("The file %s can not be opened.\n",argv[1]);

exit(1);

}

if((fp2=fopen(argv[2],"r"))==NULL)

{ printf("The file %s can not be opened.\n",argv[2]);

exit(1);

}

/* 读入一行立即写出,直到文件结束 */

while(fgets(buffer,SIZE,fp1)!=NULL)

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

while(fgets(buffer,SIZE,fp2)!=NULL)

fputs(buffer,fp1);

fclose(fp1);

fclose(fp2);

if((fp1=fopen(argv[1],"r"))==NULL)

{ printf("The file %s can not be opened.\n",argv[1]);

exit(1);

}

while(fgets(buffer,SIZE,fp1)!=NULL)

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

fclose(fp1);

}

E. 往文件中写格式化数据

1.函数原型

int fprintf(FILE *fp,char *format,arg_list)

2.功能说明

将变量表列(arg_list)中的数据,按照format指出的格式,写入由fp

指定的文件。fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。

3.参数说明

fp:这是个文件指针,指出要将数据写入的文件。

format:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。arg_list:是要写入文件的变量表列,各变量之间用逗号分隔。

4.返回值

无。

5.实例

【8.5】下列程序的执行文件为display.exe,执行时键入命令行:

display [-i][-s] filename

下面的表格列出了命令行参数的含义及其功能:

存储文件名:save.txt

程序代码如下:

/* file display program. */

#include

#define SIZE 100

main(int argc,char *argv[])

{ char buffer[SIZE],*filename;

FILE *in,*out;

int n,count,sflag=0,iflag=0;

if(argc<2||argc>4)

{ printf("Usage:display [-i] [-s] filename.\n");

exit(1);

}

for(n=1;n

{ if(!strcmp(argv[n],"-i")) iflag=1; /* 置加行号标志 */ else if(!strcmp(argv[n],"-s")) sflag=1; /* 置存储标志 */

else filename=argv[n]; /* 使filename针指向文件名 */ }

if((in=fopen(filename,"r"))==NULL)

{ printf("The file %s can not be opened.\n",filename);

exit(1);

}

/* 打开存储文件save.txt */

if((out=fopen("save.txt","w"))==NULL)

{ printf("The file %s can not opened.\n","save.txt");

exit(1);

}

count=1; /* 行号从1开始 */

while(fgets(buffer,SIZE,in)!=NULL) /* 逐行读入文件内容 */

{ if(iflag==1){

printf("%3d:%s",count,buffer); /* 显示行号和本行内容*/

/* 存储行号和本行内容 */

if(sflag==1) fprintf(out,"%3d:%s",count,buffer);

}

else {

/* 不设开关的情况下仅显示一行内容 */

printf("%s",buffer);

/* 存储本行内容 */

if(sflag==1) fprintf(out,"%s",buffer);

}

count++; /* 下一行 */

}

fclose(in);

fclose(out);

}

F. 格式化读取文件中数据

1.函数原型

int fscanf(FILE *fp,char *format,arg_list)

2.功能说明

从由fp指定的文件中,按照format指出的格式,将数据读入到由变量表列(arg_list)所列出的相应变量中去。fscanf()函数与scanf()函数的功能相同,只是scanf()函数是从键盘文件(stdin)中读入数据。

3.参数说明

fp:这是个文件指针,指出要从其中读出数据的文件。

format:这是个指向字符串的字符指针,字符串中含有要读入数据的格式,所以该字符串成为格式串。格式串描述的规则与scanf()函数中的格式串相同。

arg_list:要将数据存入其中的变量表列,各变量之间用逗号分隔。

4.返回值

返回变量个数。

5.实例

【8.6】从键盘输入一个学生的姓名、班级、年龄和学号,写入student.txt文件中,再从该文件中读取这些资料,输出到屏幕上显示。

/* fscanf() and fprintf() example */

#include

main()

{ char name[10];

int age,class;

long number;

FILE *fp;

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

{ printf("The file %s can not be opened.\n","student.txt");

exit(1);

}

fscanf(stdin,"%s %d %d %ld",name,&class,&age,&number);

fprintf(fp,"%s %5d %4d %8ld",name,class,age,number);

fclose(fp);

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

{ printf("The file %s can not be opened.\n","student.txt");

exit(1);

}

fscanf(fp,"%s %d %d %ld",name,&class,&age,&number);

printf("name class age number\n");

fprintf(stdout,"%-10s%-8d%-6d%-8ld\n",name,class,age,number); fclose(fp);

}

G. 以二进制形式读取文件中的数据

1.函数原型

int fread(void *buffer,unsigned sife,unsigned count,FILE *fp) 2.功能说明

从由fp指定的文件中,按二进制形式将sife*count个数据读到由buffer 指出的数据区中。

3.参数说明

buffer:这是一个void型指针,指出要将读入数据存放在其中的存储区首地址。sife:指出一个数据块的字节数,即一个数据块的大小尺寸。

count:指出一次读入多少个数据块(sife)。

fp:这是个文件指针,指出要从其中读出数据的文件。

4.返回值

正常返回:实际读取数据块的个数,即count。

异常返回:如果文件中剩下的数据块个数少于参数中count指出的个数,或者发生了错误,返回0值。此时可以用feof()和ferror()来判定到底出现了什么

情况。

H. 以二进制形式写数据到文件中去

1.函数原型

int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp) 2.功能说明

按二进制形式,将由buffer指定的数据缓冲区内的sife*count个数据写入

由fp指定的文件中去。

3.参数说明

buffer:这是一个void型指针,指出要将其中数据输出到文件的缓冲区首地址。sife:指出一个数据块的字节数,即一个数据块的大小尺寸。

count:一次输出多少个数据块(sife)。

fp:这是个文件指针,指出要从其中读出数据的文件。

4.返回值

正常返回:实际输出数据块的个数,即count。

异常返回:返回0值,表示输出结束或发生了错误。

5.实例

【例8.7】

#include

#define SIZE 4

struct worker{ int number;

char name[20];

int age;

};

main()

{ struct worker wk;

int n;

FILE *in,*out;

if((in=fopen("file1.txt","rb"))==NULL)

{ printf("The file %s can not be opened.\n","file1.txt");

exit(1);

}

if((out=fopen("file2.txt","wb"))==NULL)

{ printf("The file %s can not be opened.\n","file2.txt");

exit(1);

}

while(fread(&wk,sizeof(struct worker),1,in)==1)

fwrite(&wk,sizeof(struct worker),1,out);

fclose(in);

fclose(out);

}

I. 以二进制形式读取一个整数

1.函数原型

int getw(FILE *fp)

2.功能说明

从由fp指定的文件中,以二进制形式读取一个整数。

3.参数说明

fp:是文件指针。

4.返回值

正常返回:所读取整数的值。

异常返回:返回EOF,即-1。由于读取的整数值有可能是-1,所以必须用feof()或ferror()来判断是到了文件结束,还是出现了一个出错。

5.实例

【例8.8】

#include main(int argc,char *argv[])

{ int i,sum=0;

FILE *fp;

if(argc!=2)

{ printf("Command error,Usage: readfile filename\n");

exit(1);

}

if(!(fp=fopen(argv[1],"rb")))

{ printf("The file %s can not be opened.\n",argv[1]);

exit(1);

}

for(i=1;i<=10;i++) sum+=getw(fp);

printf("The sum is %d\n",sum);

fclose(fp);

}

J. 以二进制形式存贮一个整数

1.函数原型

int putw(int n,FILE *fp)

2.功能说明

以二进制形式把由变量n指出的整数值存放到由fp指定的文件中。

3.参数说明

n:要存入文件的整数。

fp:是文件指针。

4.返回值

正常返回:所输出的整数值。

异常返回:返回EOF,即-1。由于输出的整数值有可能是-1,所以必须用feof()或ferror()来判断是到了文件结束,还是出现了一个出错。

5.实例

【例8.9】

#include

main(int argc,char *argv[])

{ int i;

FILE *fp;

if(argc!=2)

{ printf("Command error,Usage: writefile filename\n");

exit(1);

}

if(!(fp=fopen(argv[1],"wb")))

{ printf("The file %s can not be opened.\n",argv[1]);

exit(1);

}

for(i=1;i<=10;i++)printf("%d\n", putw(i,fp));

fclose(fp);

}

文件状态检查

A. 文件结束

(1)函数原型

int feof(FILE *fp)

(2)功能说明

该函数用来判断文件是否结束。

(3)参数说明

fp:文件指针。

(4)返回值

0:假值,表示文件未结束。

1:真值,表示文件结束。

(5)实例

【例8.10】

#include

main(int argc,char *argv[])

{ FILE *in,*out;

char ch;

if(argc!=3)

{ printf("Usage: copyfile filename1 filename2\n");

exit(1);

}

if((in=fopen(argv[1],"rb"))==NULL)

{ printf("The file %s can not be opened.\n",argv[1]);

exit(1);

}

if((out=fopen(argv[2],"wb"))==NULL)

{ printf("The file %s can not be opened.\n",argv[2]);

exit(1);

}

while(!feof(in))

{ ch=fgetc(in);

if(ferror(in))

{ printf("read error!\n");

clearerr(in);

}

else

{ fputc(ch,out);

if(ferror(out))

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

clearerr(out);

}

}

}

fclose(in);

fclose(out);

}

B. 文件读/写出错

(1)函数原型

int ferror(FILE *fp)

(2)功能说明

检查由fp指定的文件在读写时是否出错。(3)参数说明

fp:文件指针。

(4)返回值

0:假值,表示无错误。

1:真值,表示出错。

(5)实例

【例8.11】

C. 清除文件错误标志

(1)函数原型

void clearerr(FILE *fp)

(2)功能说明

清除由fp指定文件的错误标志。

(3)参数说明

fp:文件指针。

(4)返回值

无。

(5)实例

【例8.12】

#include

main(int argc,char *argv[])

{ FILE *in,*out;

char ch;

if(argc!=3)

{ printf("Usage: copyfile filename1 filename2\n");

exit(1);

}

if((in=fopen(argv[1],"rb"))==NULL)

{ printf("The file %s can not be opened.\n",argv[1]);

exit(1);

}

if((out=fopen(argv[2],"wb"))==NULL)

{ printf("The file %s can not be opened.\n",argv[2]);

exit(1);

}

while(!feof(in))

{ ch=fgetc(in);

if(ferror(in))

{ printf("read error!\n");

clearerr(in);

}

else

{ fputc(ch,out);

if(ferror(out))

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

clearerr(out);

}

}

}

fclose(in);

fclose(out);

}

D. 了解文件指针的当前位置

(1)函数原型

long ftell(FILE *fp)

(2)功能说明

取得由fp指定文件的当前读/写位置,该位置值用相对于文件开头的位移量来表示。

(3)参数说明

fp:文件指针。

(4)返回值

正常返回:位移量(这是个长整数)。

异常返回:-1,表示出错。

(5)实例

文件定位

A. 反绕

(1)函数原型

void rewind(FILE *fp)

(2)功能说明

使由文件指针fp指定的文件的位置指针重新指向文件的开头位置。(3)参数说明

fp:文件指针。

(4)返回值

无。

(5)实例

【例8.14】

#include

main()

{ FILE *in,*out;

in=fopen("filename1","r");

out=fopen("filename2","w");

while(!feof(in)) fputc(fgetc(in),out);

rewind(out);

while(!feof(in)) putchar(fgetc(in));

fclose(in);

fclose(out);

}

B. 随机定位

(1)函数原型

int fseek(FILE *fp,long offset,int base)

(2)功能说明

使文件指针fp移到基于base的相对位置offset处。

(3)参数说明

fp:文件指针。

offset:相对base的字节位移量。这是个长整数,用以支持大于64KB

的文件。

base:文件位置指针移动的基准位置,是计算文件位置指针位移的基点。ANSI C定义了base的可能取值,以及这些取值的符号常量。

(4)返回值

正常返回:当前指针位置。

异常返回:-1,表示定位操作出错。

(5)实例

【例8.15】

#include

struct std_type{ int num;

char name[20];

int age;

char class;

}stud;

int cstufile(void)

{ int i;

FILE *fp;

if((fp=fopen("stufile","wb"))==NULL)

{ printf("The file can't be opened for write.\n");

return(0);

}

for(i=1;i<=100;i++)

{ stud.num=i;

strcpy(https://www.sodocs.net/doc/f28373891.html,,"aaaa");

stud.age=17;

stud.class='8';

fwrite(&stud,sizeof(struct std_type),1,fp);

}

fclose(fp);

return(1);

}

main()

{ int n;

FILE *fp;

if(cstufile()==0) exit(1);

if((fp=fopen("stufile","rb"))==NULL)

{ printf("The file can not be opened.\n");

exit(1);

}

for(n=0;n<100;n+=2)

{ fseek(fp,n*sizeof(struct std_type),SEEK_SET);

fread(&stud,sizeof(struct std_type),1,fp);

printf("%10d%20s%10d%4c\n",

stud.num,https://www.sodocs.net/doc/f28373891.html,,stud.age,stud.class);

}

fclose(fp);

}

关于exit()函数:

1.函数原型

void exit(int status)

2.功能说明

exit()函数使程序立即终止执行,同时将缓冲区中剩余的数据输出并关闭所有已经打开的文件。

3.参数说明

status:为0值表示程序正常终止,为非0值表示一个定义错误。

4.返回值

无。

关于feof()函数

1.函数原型

int feof(FILE *fp)

2.功能说明

在文本文件(ASCII文件)中可以用值为-1的符号常量EOF来作为文件的结束符。但是在二进制文件中-1往往可能是一个有意义的数据,因此不能用它来作为文件的结束标志。为了能有效判别文件是否结束,ANSI C提供了标准函数feof(),用来识别文件是否结束。

3.参数说明

fp:文件指针。

4.返回值

返回为非0值:已到文件尾。

返回为0值:表示还未到文件尾。

c和c语言的文件操作全高效与简洁修订稿

c和c语言的文件操作 全高效与简洁 SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#

例一 #include "" int main() {FILE *fp,*f; int a,b,c; fp=fopen("","r"); f=fopen("","w"); fscanf(fp,"%d%d%d",&a,&b,&c); a=5; b=3; fprintf(f,"%d%d",a+b+c,b); fclose(fp); fclose(f); return 0;} 例二、新建一个名为的文件,里面按如图1存储6个数据,然后在同一目录下建立一文件,按图2格式输出这六个数据。 #include "" int main() {FILE *fp,*fpp; int a,b,c,d,e,f; fp=fopen("","r"); fpp=fopen("","w"); fscanf(fp,"%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f); fprintf(fpp,"%d%d%d%d%d%d",a,b,c,d,e,f); fclose(fp); fclose(fpp); return 0;}

c++常用: #include <> ifstream filein(""); // 定义一个文件输入流 ofstream fileout(""); //cout<< --> fileout<< () //文件到末尾,返回非零值 表示输入的数据文件 本地测试的话本来输入的数据就要在这个文件里面测试了 建一个本地的文本,可以用记事本的方式打开 注意:文件输入的话,以后的cin>>都要改成filein>>, cout<<都要改成fileout<< c语言常用: freopen("","r",stdin); //重定向所有标准的输入为文件输入 freopen("","w",stdout);//重定向所有标准的输出为文件输出 fclose(stdout);//输出结束 freopen("","r",stdin); //重定向所有标准的输入为文件输入 freopen("","w",stdout);//重定向所有标准的输出为文件输出 fclose(stdout);//输出结束 第一句的意思就是文件输入,以"读状态",去替换标准的输入 以上如果只是规定用文件输入输出的某一种,那么就只用其中的一种 方法一:最简单的 main() { freopen("","r",stdin);//从中读取数据 freopen("","w",stdout);//输出到文件 } 方法二:速度比第一种快 main() { FILE *in; FILE *out; in=fopen("","r"); //指针指向输入文件

C语言读写文件操作

C语言读写文件操作 #include #include #include FILE *stream;//, *stream2; FILE *stream2; void main( void ) { int numclosed; char *list; list="这个程序由czw编写"; //试图打开文件data.txt,如果该文件不存在,则自动创建 if( (stream= fopen( "data.txt", "r" )) == NULL ) { printf( "试图打开'data.txt'\n" ); printf( "'data.txt'不存在\n" ); printf( "'data.txt'被创建\n" ); } else printf( "'data.txt'被打开\n" ); //以写入方式打开 if( (stream2 = fopen( "data.txt", "w+" )) == NULL ) printf( "'data.txt'不存在\n" ); else { printf( "'data.txt'成功被打开\n" ); fwrite(list,strlen(list),30,stream2); printf("写入数据成功\n"); } //如果文件data.txt存在,就会打开成功,则stream!=NULL,这时就关闭stream if (stream!=NULL) if( fclose( stream) ) printf( "文件流 stream 被关闭\n" ); //关闭所有打开的文件流,返回关闭的文件流个数 numclosed = _fcloseall( );

C语言程序中关于文件的操作

文件操作函数C语言(FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct{ int level;/*fill/empty level of buffer*/ unsigned flags;/*File status flags*/ char fd;/*File descriptor*/ unsigned char hold;/*Ungetc char if no buffer*/ int bsize;/*Buffer size*/ unsigned char_FAR*buffer;/*Data transfer buffer*/ unsigned char_FAR*curp;/*Current active pointer*/ unsigned istemp;/*Temporary file indicator*/ short token;/*Used for validity checking*/ }FILE;/*This is the FILE object*/ FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能 fopen()打开流 fclose()关闭流 fputc()写一个字符到流中 fgetc()从流中读一个字符 fseek()在流中定位到指定的字符 fputs()写字符串到流 fgets()从流中读一行或指定个字符 fprintf()按格式输出到流 fscanf()从流中按格式读取 feof()到达文件尾时返回真值 ferror()发生错误时返回其值 rewind()复位文件定位器到文件开始处 remove()删除文件 fread()从流中读指定个数的字符 fwrite()向流中写指定个数的字符 tmpfile()生成一个临时文件流 tmpnam()生成一个唯一的文件名 下面就介绍一下这些函数 1.fopen() fopen的原型是:FILE*fopen(const char*filename,const char*mode),fopen实现三个功

C语言 文件操作

C语言中的文件操作 12.1请编写一个程序,把一个文件的内容复制到另一个文件中。 程序如下: #include main() { char ch; FILE *fp1; FILE *fp2; if((fp1=fopen("C:\\Users\\acer\\Documents\\1.txt","r"))==NULL) { printf("The file 1.txt can not open!"); exit(0); } if((fp2=fopen("C:\\Users\\acer\\Documents\\2.txt","w"))==NULL) { printf("The file 2.txt can not open!"); exit(0); } ch=fgetc(fp1); while(!feof(fp1)) { fputc(ch,fp2); ch=fgetc(fp1); } fclose(fp1); fclose(fp2); } 运行结果: 12.3请编写一个程序,比较两个文件,如果相等则返回0;否则返回1。

程序如下:#include main() { FILE *f1,*f2; char a,b,c; int x; printf("input strings for file1\n"); f1=fopen("file1","w"); while((c=getchar())!= EOF) putc(c,f1); fclose(f1); printf("output strings for file1\n"); f1=fopen("file1","r"); while((c=getc(f1))!= EOF) printf("%c",c); fclose(f1); printf("\n\ninput strings for file2\n"); f2=fopen("file2","w"); while((c=getchar())!= EOF) putc(c,f2); fclose(f2); printf("\noutput strings for file2\n"); f1=fopen("file2","r"); while((c=getc(f2))!= EOF) printf("%c",c); fclose(f2); f2=fopen("file2","r"); getch(); }

Linux下C语言的文件读写

Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操 作) //================================== fputc 向文件写入字符 #include #include main() { FILE *fp; char ch; if((fp=fopen("test.txt","w"))==NULL) { printf("不能打开文件\n"); exit(0); } while ((ch=getchar())!='\n') fputc( ch, fp ); fclose(fp); } ------------- 小提示: fp=fopen("test.txt","w") ,把"w"改为"a" 可以创建文件并且追加写入内容 exit(0); 需要包含stdlib.h 头文件,才能使用 //============================================================ fgetc 读取字符 #include #include main( int argc, char *argv[] ) { char ch;

FILE *fp; int i; if((fp=fopen(argv[1],"r"))==NULL) { printf("不能打开文件\n"); exit(0); } while ((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp); } 文件结尾,通过判断EOF //============================================================== fwrite 的使用 使数组或结构体等类型可以进行一次性读写 #include #include main() { FILE *fp1; int i; struct student{ char name[10]; int age; float score[2]; char addr[15]; }stu; if((fp1=fopen("test.txt","wb"))==NULL) { printf("不能打开文件"); exit(0); } printf("请输入信息,姓名年龄分数1 分数2 地址:\n"); for( i=0;i<2;i++) { scanf("%s %d %f %f %s",https://www.sodocs.net/doc/f28373891.html,,&stu.age,&stu.score[0],&stu.score[1], stu.addr);

C语言中关于文件操作

C语言中关于文件操作 C语言中的文件 C语言把文件看作一个字节的序列 C语言对文件的存取是以字节为单位的文本文件(ASCII文件) 按数据的ASCII形式存储 二进制文件 按数据在内存中的二进制形式存储 文本文件和二进制文件 缓冲文件系统 文件类型指针 FILE类型 保存被使用的文件的有关信息 所有的文件操作都需要FILE类型的指针 FILE是库文件中定义的结构体的别名注意不要写成struct FILE 举例 FILE *fp;

FILE类型 typedef struct { short level; /*缓冲区满空程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*无缓冲则不读取字符*/ short bsize; /*缓冲区大小*/ unsigned char *buffer; /*数据缓冲区*/ unsigned char *curp; /*当前位置指针*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/ } FILE; 文件的打开 (fopen函数) 函数原型 FILE *fopen(char *filename, char *mode); 参数说明 filename: 要打开的文件路径 mode: 打开模式 返回值 若成功,返回指向被打开文件的指针 若出错,返回空指针NULL(0) 打开模式描述 r 只读,打开已有文件,不能写 w 只写,创建或打开,覆盖已有文件 a 追加,创建或打开,在已有文件末尾追加 r+ 读写,打开已有文件 w+ 读写,创建或打开,覆盖已有文件 a+ 读写,创建或打开,在已有文件末尾追加 t 按文本方式打开 (缺省) b 按二进制方式打开 文件的打开模式 文件的关闭 (fclose函数) 函数原型 int fclose(FILE *fp); 参数说明 fp:要关闭的文件指针 返回值 若成功,返回0 若出错,返回EOF(-1) 不用的文件应关闭,防止数据破坏丢失

C语言文件操作大全

1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1); 2.创建文件 //using System.IO; File.Create(%%1); 3.删除文件 //using System.IO; File.Delete(%%1); 4.删除文件夹 //using System.IO; Directory.Delete(%%1); 5.删除一个目录下所有的文件夹 //using System.IO; foreach (string dirStr in Directory.GetDirectories(%%1)) { DirectoryInfo dir = new DirectoryInfo(dirStr); ArrayList folders=new ArrayList(); FileSystemInfo[] fileArr = dir.GetFileSystemInfos(); for (int i = 0; i < folders.Count; i++) { FileInfo f = folders[i] as FileInfo; if (f == null) { DirectoryInfo d = folders[i] as DirectoryInfo; d.Delete(); } } } 6.清空文件夹 //using System.IO; Directory.Delete(%%1,true); Directory.CreateDirectory(%%1); 7.读取文件 //using System.IO; StreamReader s = File.OpenText(%%1); string %%2 = null; while ((%%2 = s.ReadLine()) != null){

c语言中目录及文件操作

1. 错误处理与错误号 cat /usr/include/asm-generic/errno-base.h #define EPERM 1 /* Operation not per mitted */ #define ENOENT 2 /* No suc h file or director y */ #define ESRCH 3 /* No suc h proc ess */ #define EINTR 4 /* Interrupted s y stem call */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such dev ice or address */ #define E2BIG 7 /* Argument list too long */ #define ENOEXEC 8 /* Ex ec format error */ #define EBADF 9 /* Bad file number */ #define ECHILD 10 /* No c hild process es */ #define EAGAIN 11 /* Try again */ #define ENOMEM 12 /* Out of memor y */ #define EACCES 13 /* Per mission denied */ #define EFAULT 14 /* Bad address */ #define ENOTBLK 15 /* Bl oc k dev ice required */ #define EBUSY 16 /* Dev ice or resource bus y */ #define EEXIST 17 /* File ex ists */ #define EXDEV 18 /* Cross-dev ice link */ #define ENODEV 19 /* N o suc h dev ice */ #define ENOTDIR 20 /* Not a direc tor y */ #define EISDIR 21 /* Is a director y */ #define EINVAL 22 /* Inv alid argument */ #define ENFILE 23 /* File table ov erflow */ #define EMFILE 24 /* Too many open files */ #define ENOTTY 25 /* Not a ty pewriter */ #define ETXTBSY 26 /* Text file bus y */ #define EFBIG 27 /* File too large */ #define ENOSPC 28 /* N o space l eft on dev ic e */ #define ESPIPE 29 /* Illegal seek */ #define EROFS 30 /* Read-onl y file s y s tem */ #define EMLINK 31 /* T oo many link s */ #define EPIPE 32 /* Brok en pipe */ #define EDOM 33 /* Math argument out of domain of func */ #define ERANGE 34 /* M ath r esult not repres entabl e */ 1.1 用错误常数显示错误信息 函数strerror()可以把一个错误常数转换成一个错误提示语句。char *strerror(int errnum); #include #include #include int main()

C语言中文件_数据的输入输出_读写

C语言中文件,数据的输入输出,读写. 文件是数据的集合体,对文件的处理过程就是对文件的读写过程,或输入输出过程。 所谓文件是指内存以外的媒体上以某种形式组织的一组相关数据的有序集合。文件分类: 顺序文件,随机文件。 文本文件和二进制文件。 文本文件也称为ASCII文件,在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 文本文件可以在屏幕上按字符显示,源程序文件就是文本文件,由于是按字符显示,所以能读懂文件内容。 二进制文件是按二进制编码方式来存放的。这里主要讨论文件的打开,关闭,读,写,定位等操作。 文件的存取方法 C程序的输入输出(I/O)有两种方式:一种称为标准I/O或流式I/O,另一种称为低级I/O。流式I/O是依靠标准库函数中的输入输出函数实现的。低级I/O利用操作系统提供的接口函数(称为底层接口或系统调用)实现输入输出,低级I/O 主要提供系统软件使用。 在C语言中用一个FILE类型的指针变量指向一个文件,(FILE类型是系统在stdio.h中定义的描述已打开文件的一种结构类型),这个指针称为文件指针。FILE *指针变量标识符; 如 FILE *fp; 文件的打开与关闭 所谓打开文件,指的是建立文件的各种有关信息,并使文件指针指向该文件,以便对它进行操作。 关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。 1、fopen 函数原型:FILE *fopen(const char *filename,const char *mode); Fopen函数用来打开一个文件,前一部分用来说明文件路径及文件名,后一部分mode指出了打开文件的存取方式;返回值是被打开文件的FILE型指针,若打开失败,则返回NULL。打开文件的语法格式如下: 文件指针名=fopen(文件名,使用文件方式); 文件指针名必须被说明为FILE类型的指针变量。 FILE *fp; fp=fopen(“C:\\Windowss\\abc.txt”,”r”); 注意用两个反斜杠\\来表示目录间的间隔符。 存取文件的模式是一个字符串,可以由字母r,w,a,t,b及+组合而成,各字符的含

c语言程序中文件的操作

文件操作函数 C语言 (FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在中定义如下: typedef struct { int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ int bsize; /* Buffer size */ unsigned char _FAR *buffer; /* Data transfer buffer */ unsigned char _FAR *curp; /* Current active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ } FILE; /* This is the FILE object */ FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能 fopen() 打开流 fclose() 关闭流 fputc() 写一个字符到流中

C语言 文件练习题

C语言文件练习题 1.系统的标准输入文件是指_________. a)键盘 b)显示器 c)软盘 d)硬盘 2.若执行fopen函数时发生错误,则函数的返回值是______. a)地址值 b)0 c)1 d)EOF 3.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是______. a)"ab+" b)"wb+" c)"rb+" d)"ab" 4.fscanf函数的正确调用形式是______. a)fscanf(fp,格式字符串,输出表列) ) 11.下列关于C语言数据文件的叙述中正确的是________ A)文件由ASCII码字符序列组成,C语言只能读写文本文件 B)文件由二进制数据序列组成,C语言只能读写二进制文件 C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 12.函数fseek(pf, OL,SEEK_END)中的SEEK_END代表的起始点是________ A)文件开始B)文件末尾C)文件当前位置D)以上都不对 13.C语言中,能识别处理的文件为_______ A)文本文件和数据块文件B)文本文件和二进制文件 C)流文件和文本文件D)数据文件和二进制文件

14.若调用fputc函数输出字符成功,则其返回值是________ A)EOF B)1 C)0 D)输出的字符 15 已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是______ A)一个整型变量,代表要读入的数据项总数 B)一个文件指针,指向要读的文件 C)一个指针,指向要读入数据的存放地址 D)一个存储区,存放要读的数据项 16 当顺利执行了文件关闭操作时,fclose函数的返回值是_________ A)-1 B)TRUE C)0 D)1 17.如果需要打开一个已经存在的非空文件“Demo”进行修改下面正确的选项是______ 盘 d) 为pname指定的相应文件开辟一个缓冲区,调用操作系统提供的打开或 建立新文件功能; 22.利用fwrite (buffer, sizeof(Student),3, fp)函数描述不正确的_________. a) 将3个学生的数据块按二进制形式写入文件; b) 将由buffer指定的数据缓冲区内的3* sizeof(Student)个字节的数据写入指定文件; c) 返回实际输出数据块的个数, 若返回0值表示输出结束或发生了错误; d) 若由fp指定的文件不存在,则返回0值; 23.利用fread (buffer,size,count,fp)函数可实现的操作_________. a) 从fp指向的文件中,将count个字节的数据读到由buffer指出的数据区

C语言程序设计第一章作业

一、单选题(每小题10分,共100分,得分70 分) 1、1.关于C程序的构成描述,_________是不正确的。 A、一个源程序至少且仅包含一个main函数,也可包含一个main函数和若干个其他函数。 B、函数由函数首部和函数体两部分组成,二者缺一不可。 C、函数首部通常是函数的第1行,包括:函数属性、函数类型、函数名、函数参数等,不管有无函数参数,都必须用一对圆括号括起来。 D、函数体通常在函数首部下面,用一对花括号将声明部分和执行部分括起来,但不能为空。 你的回答:D (√) 参考答案:D 2、2.C程序中,不管是数据声明还是语句,都必须有一个结束符,它是C语句的必要组成部分,该符号是_________。 A、逗号“,” B、句号“。” C、分号“;” D、单撇号“’” 你的回答:C (√) 参考答案:C 3、3.下列关于C程序的运行流程描述,______是正确的。 A、编辑目标程序、编译目标程序、连接源程序、运行可执行程序。 B、编译源程序、编辑源程序、连接目标程序、运行可执行程序。 C、编辑源程序、编译源程序、连接目标程序、运行可执行程序。 D、编辑目标程序、编译源程序、连接目标程序、运行可执行程序。 你的回答:C (√) 参考答案:C 4、5.描述或表示算法有多种方法,______不是常用的表示方法。 A、自然语句 B、流程图或N-S图 C、伪代码 D、效果图 你的回答:D (√) 参考答案:D

5、7.C语言是一种结构化的程序设计语言,任何程序都可以将模块通过3种基本的控制结构进行组合来实现,这三种基本的控制结构是指______。 A、分支结构、循环结构、函数结构 B、顺序结构、选择结构、函数结构 C、顺序结构、分支结构、循环结构 D、以上描述都不正确 你的回答:D (×) 参考答案:C 6、下列关于算法特性的描述,______是不正确的。 A、有穷性:指一个算法应该包含有限的操作步骤,而不能是无限的。 B、确定性:指算法的每一个步骤都应当是确定的,不应该是含糊的、模棱两可的。 C、有效性:指算法中的每一个步骤都应当能有效地执行,并得到确定的结果。 D、输入/输出性:指算法中可以有输入/输出操作,也可以没有输入/输出操作。 你的回答:D (√) 参考答案:D 7、关于运行一个C程序的描述,______是正确的。 A、程序总是从main()函数处开始运行,当main()函数执行结束时,程序也就执行结束。 B、程序总是从main()函数处开始运行,当调用其它函数时,也可在其它函数中执行结束。 C、当程序中无main()函数时,可以设置一个主控函数来代替main()函数,从而达到运行程序的目的。 D、以上描述都不正确。 你的回答:B (×) 参考答案:A 8、下列关于C程序中复合语句的描述,______是正确的。 A、用一对圆括号“( )”将若干语句顺序组合起来就形成一个复合语句。 B、用一对大括号“{ }”将若干语句顺序组合起来就形成一个复合语句。 C、用一对大括号“[ ]”将若干语句顺序组合起来就形成一个复合语句。 D、以上描述都不正确。 你的回答:B (√) 参考答案:B 9、一个C源程序文件的扩展名是______。

C语言文件操作命令

C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include 定义函数 int fclose(FILE * stream); 函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。 错误代码 EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose 表头文件 #include 定义函数 FILE * fdopen(int fildes,const char * mode); 函数说明 fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行 hello! feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread 表头文件 #include 定义函数 int feof(FILE * stream); 函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返

C语言文件操作

文件 教学目标:了解文件的概念;熟练掌握缓冲文件系统和非缓冲文件系统的概念及其区别;熟练掌握文件类型指针的概念;熟练掌握打开文件和关闭文件的方法;熟练掌握利用标准I/O提供的四种读写文件的方法对文件进行顺序读写和随机读写;了解文件操作的出错检测方法。 教学重点:缓冲文件系统与非缓冲文件;文件类型指针;文件的打开与关闭;利用标准I/O提供的四种读写文件的方法对文件进行顺序读写和随机读写。 教学难点:缓冲文件系统与非缓冲文件;利用标准I/O提供的四种读写文件的方法对文件进行顺序读写操作和随机读写操作。 §11.1 文件概述 11.1.1 文件的概念 所谓文件是指记录在外部存储介质上的数据集合。例如,用EDLN编辑好的一个源程序就是一个文件,把它存储到磁盘上就是一个磁盘文件。从计算机上输出一个源文件到打印机,这也是一个文件。广义上说,所有输入输出设备都是文件。例如,键盘、显示器、打印机都是文件。计算机以这些设备为对象进行输入输出,对这些设备的处理方法统一按文件处理。 计算机中的文件可以从不同角度进行分类: (1)按文件介质:磁带文件、磁盘文件和卡片文件等。 (2)按文件内容:源程序文件、目标文件、可执行文件和数据文件等。 (3)按文件中数据的组织形式:二进制文件和文本文件。 文本文件是指文件的内容是由一个一个的字符组成,每一个字符一般用该字符对应的ASCII码表示。例如,一个实数136.56占6个字符。二进制文件是以数据在内存中的存储形式原样输出到磁盘上去。例如,实数136.56在内存中以浮点形式存储,占4个字符,而不是6个字节。若以二进制形式输出此数,就将该4个字节按原来在内存中的存储形式送到磁盘上去。不管一个实数有多大,都占4个字节。一般来说,文本文件用于文档资料的保存,方便用户阅读理解;二进制文件节省存储空间而且输入输出的速度比较快。因为在输出时不需要把数据由二进制形式转换为字符代码,在输入时也不需要把字符代码先换成二进制形式然后存入内存。如果存入磁盘中的数据只是暂存的中间结果数据,以后还要调入继续处理,一般用二进制文件以节省时间和空间。如果输出的数据是准备作为文档供给人们阅读的,一般用字符代码文件,它们通过显示器或打印机转换成字符输出,比较直观。 11.1.2 缓冲文件系统和非缓冲文件系统 目前C语言所使用的磁盘文件系统有两大类:一类称为缓冲文件系统,又称为标准文件系统或高层文件系统;另一类称非缓冲文件系统,又称为低层文件系统。 (1)缓冲文件系统的特点 对程序中的每一个文件都在内存中开辟一个“缓冲区”。从磁盘文件输入的数据先送到“输入缓冲区”,然后再从缓冲区依次将数据送给接收变量。在向磁盘文件输出数据时,先将程序数据区中变量或表达式的值送到“输出缓冲区”中,然后

C语言文件操作之绝对路径

C语言中对文件进行操作如何使用绝对路径? 我编了一个小程序试了一下,好像默认的路径是在生成的.exe文件所在目录下。如果使用像D:\\ABC.TXT这样的路径可以在D盘下对ABC.TXT进行操作,但如果使用D:\\SSS\ABC.TXT就不正确了,创建的文件是SSSABC.TXT,不支持多级的路径,它把路径和文件名弄混了。 到底怎么办 D:\\SSS\\ABC.TXT //你少了个\,在C字符串中,出现\的地方,你一律打两个\\就行了。 请问啊,C语言里,fopen、fread与fwrite的参数中,要求文件名,用写盘符吗? 写绝对路径吗?#include #include int main() { FILE *pfile = fopen("d:\\Jimmy.txt","wb");//Jimmy.txt写在D盘根目录下绝对路径//以2进制写入方式打开 //FILE *pfile = fopen("\\Jimmy.txt","wb");//Jimmy.txt写在当前目录下相对路径//以2进制写入方式打开 char sz[6] = "Billy"; fwrite("Jimmy",6,1,pfile);//将字串"Jimmy"写入文件pfile fclose(pfile); pfile = fopen("d:\\Jimmy.txt","rb");//以2进制读取方式打开绝对路径,D盘根目录 //pfile = fopen("\\Jimmy.txt","rb");//以2进制读取方式打开相对路径,当前路径 printf(sz);//显示原字串 printf("\n"); fread((char*)sz,6,1,pfile);//由开头读入6字节信息 printf(sz);//显示读取的信息 printf("\n"); fclose(pfile); system("pause"); return 0; }

C语言常用语句总结

C语言常用语句总结 一:常用函数 1、putchar函数: putchar函数(字符输出函数):向终端输出一个字符。 一般形式为: putchar(c)// 输出字符变量c的值。== printf(“%c”,c) 2、getchar函数 getchar函数(字符输入函数):从终端输入一个字符。 getchar函数没有参数,一般形式为: c=getchar() //将输入的字符赋值给c 3、printf函数 printf函数(格式输入函数):向终端输出若干个任意类型的数据。 printf的一般格式为: printf(“格式控制”,对应变量名)// 例如:printf(”%d,%c\n”,i,c) 4、scanf函数 scanf(格式输入函数):从终端输入若干个任意类型的数据。 一般形式为: scanf(“格式控制”,&变量名) 二:基本语句(除if语句外,switch和三种循环语句都需要{大括号}的支持) (1)条件语句if和switch 1、if语句: ********************* if(表达式) 语句1; 语句2;// if下的各独立语句用分号分隔。 ********************* if(表达式) 语句1; else 语句2; ********************* if(表达式1)

else if(表达式2) // 每一个if与他最近的一个else对应。 语句2; .... else if(表达式n) 语句n; else 语句n+1; ********************* If语句的嵌套 if(表达式) if(表达式)语句1 else语句2 else if(表达式)语句3 else语句4 2、switch语句 switch (表达式) { case 常量表达式1: 语句1 case常量表达式2: 语句2 // 每一个case表达式后都需要加上break跳出,否则case常量表达式n: 将依次执行下去。 语句n default :// 大括号划分switch内语句 语句n+1 } (2)三种循环语句 1、while语句 while语句用来实现“当型”循环结构。 一般形式如下: while(表达式) // 当表达式非0值时(逻辑表达式),执行while语句中的内嵌套语句,{ 先判断后执行。 语句1; // 分号间隔每一个独立语句。 语句2;// 大括号划分出while内语句。 } 2、do… while 语句 do… while 语句先执行循环体,然后判断循环条件是否成立。

c语言文件操作的语句

文件操作 //1.定义文件类型指针 FILE *fp; //2. 以只读方式打开文件 fp = fopen(“data.in”, “r”); //3. 判断文件打开是否失败 if (fp==NULL){ printf(“Error 1\n”); return 1; } // 4. 判断整型数据输入是否非法 // ①文件为空或数据格式不符致使输入不成功,即没读到数据 //②输入数据不合题意(假设题目要求31 &&n < 10) { // ①|| !②printf (“Error 2\n”); fclose(fp); //关闭文件 return 2; } // 5. 判断字符串输入是否非法 // ①文件为空或数据格式不符致使输入不成功,即没读到字符串str //②输入数据不合题意(假设题目要求串长strlen(str)<80)lenth = strlen( (str, 80, fp)

if ( !(0< lenth && lenth <80) ) { // fgets失败返回0 printf (“Error 2\n”); fclose(fp); //关闭文件 return 2; } // 6. 判断字符输入是否非法: // ①文件为空或数据格式不符致使输入不成功,即没读到字符ch //②输入数据不合题意(假设题目要求ch为数字) if ( ch = fgetc(fp) == EOF || !(…0?<=ch && ch<=’9’ ) ) { // ①||!②printf (“Error 2\n”); fclose(fp); //关闭文件 return 2; } //7. 调用fscanf函数从文件输入n个学生信息的结构体型数据 #define SIZE 60 struct student_type{ unsigned long num; char name[10]; int score[3]; }stud[SIZE];

C语言文件操作函数freopen

freopen 目录 函数简介 程序例 函数简介 函数名: freopen 功能: 替换一个流,或者说重新分配文件指针,实现重定向。如果stream流已经打开,则先关闭该流。如果该流已经定向,则freopen将会清除该定向。此函数一般用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错。 用法: FILE *freopen(const char *filename,const char *type, FILE *stream); 头文件:stdio.h 返回值:如果成功则返回该指向该stream的指针,否则为NULL。 程序例 举例1: #include int main() { /* redirect standard output to a file */ if (freopen("D:OUTPUT.txt", "w", stdout)==NULL) fprintf(stderr, "error redirecting stdout\n"); /* this output will go to a file */ printf("This will go into a file."); /* close the standard output stream */ fclose(stdout); return 0; } 举例2: 如果上面的例子您没看懂这个函数的用法的话,请看这个例子。这个例子实现了从stdout到一个文本文件的重定向。即,把输出到屏幕的文本输出到一个文本文件中。 #include int main() { int i; if (freopen("D:OUTPUT.txt", "w", stdout)==NULL) fprintf(stderr, "error redirecting\stdout\n"); for(i=0;i<10;i++) printf("%3d",i); printf("\n"); fclose(stdout);

相关主题