C文件概述
文件的打开与关闭
操作符号
“r'' : (只读)为输入打开一个文本 文件
“w" : (只写) 为输出打开一个文本 文件
”a" : (追加) 在文本文件尾增加数据
“rb" : (只读)为输入打开一个二进制 文件
”wb" : (只读)为输出打开一个二进制 文件
打开关闭文件函数:
FILE *fp; //定义文件指针 fp = fopen (" D :\date.text " , " w ") ;//w是在文件中写入;r是从文件中读;a是在文本文件尾追加 if (fp == NULL ){ printf("not found" ); exit(0);//终止程序 } fclose(fp );
文件的读写
注意:文本可以新建,但是文件不可以,必须先手动建立一个文件后再打开写入
文本文件
一、字符输入输出函数
(fputc() 和 fgetc() )
char ch ;//写入 ch = getchar(); while(ch != '#'){ putchar(ch); fputc( ch , fp ) ; //将ch字符一个一个地写入fp指向的文件中; ch = getchar(); }
char ch ;//读取 ch = fgetc(fp) ;//从文件中读取字符 while( ch != EOF ){//EOF是不可输出字符!!! putchar(ch); ch = fgetc(fp) ; }
(fputs() 和 fgets())
char a[10];//写入 gets(a) ; fputs( a , fp ) ;//将a字符串写入文本文件中 puts(a);
char a[20] ;//读取 fgets(a ,13 , fp ) ;//注意格式 puts(a);
二进制文件
char ch ;//读取 ch = fgetc( fp ) ; while( !feof ){ putchar( ch ) ; ch = fgetc( fp ); }
一个文件写入另一个文件(二进制为例子)
FILE *fp1 , *fp2 ; char ch ; fp1 = fopen("d:\\date.txt" , "r"); if(fp1 == NULL ) ...... fp2 = fopen("d:\\date2.txt" , "w");//如果不设置文本路径,就会和程序在同一个位置 if(fp2 == NULL ) ...... while( !feof ){ //end of file ch = fgetc(fp1); fputc( ch , fp2 ); }
数据块读写函数(fread 和 fwrite)
fread( buffer , size , count , fp ) ;
fwrite( fp , size , count , buffer ) ;
参数说明:
buffer :一个指针
对 fread 来 说 它 是 读 入 数 据 的 存 放 地 址
对 fwrite 来 说 它 是 输 出 数 据 的 地 址 (均 指 起 始 地 址 )
size : 要 读 写 的 字 节 数
count : 要 进 行 读 写 多 少 个 size 字 节 的 数 据 项
fp : 文 件 型 指 针
例如:fread( f , 4 , 2 , fp ) ;
此 函 数 从 fp 所 指 向 的 文 件 中 读 入 2 个 4 个 字 节 的 数 据 ,存 储 到 数 组 f 中 。
代码如下:
struct stud{
int num;
int age;
}stu1[3] ,stu2[3] ;
//
void save(){
FILE *fp;
if((fp = fopen("d:\\date1.txt" , "wb")) == NULL )...
for( int i = 0 ; i < 3 ; i++)
if(fwrite( &stu1[i] , sizeof(struct stud) , 1 , fp ) != 1) {
printf("write erorr");
return ;//将stu1写进fp文件
}
fclose(fp);
}
void print(){
FILE *fp;
if((fp = fopen("d:\\date1.txt" , "wr") == NULL)...
for( int i = 0 ;i < 3; i++){
fread(&stu2[i] , sizeof(struct stud) , 1, fp );//将fp文件写进stu2
printf("%8d %8d\n", stu2[i].num ,sttu2[i].age );
}
fclose(fp);
return ;
}
int main(){
for( int i = 0 ; i < 3 ; i++) scanf("%d%d" , &stu1[i].num , &stu1[i].age );
save();
print();
return 0;
}
*****************大一程序训练的学习笔记,有错请指出~谢谢@__@