文件
文件类型指针 : FILE *标识符 eg. FILE*fp
打开文件:
fopen()用指定的文件使用模式打开指定文件,并返回一个文件指针。
FILE *fp;
fp=fopen(文件名,文件使用模式);
文件名为要打开文件的完整描述,即为“文件地址+文件名”,为字符串,地址用/或\\表示
文件使用模式:
文件读写:
读函数 | 写函数 |
fscanf( ) | fprintf( ) |
fgetc( ) | fputc( ) |
getc( ) | putc( ) |
fgets( ) | fputs( ) |
fread() | fwrite( ) |
文件输入输出操作:
字符输出:fputc(ch,fp);//将一个字符输出到指定文件,写文件
例题:
FILE *fopenfun(char *file,char *model)
{ FILE *fp;
if ( ( fp = fopen (file, model) ) == NULL )
{ printf ("Cannot open file of %s.\n",file);
exit (0);
}
else return fp;
}
#include <stdio.h>
main( )
{ FILE *fp;
char ch;
fp=fopenfun("file.txt","w");
while ( (ch=getchar( )) != '@' ) /* 判断输入的是否为结束标志 */
{ch=~ch; /* 对输入的字符按位取反加密*/
fputc(ch, fp); /* 读入的字符写入磁盘文件 */
}
fclose(fp); /* 关闭磁盘文件 */
}
字符输入:ch=fgetc( ); 读取fp指定的文件读取一个字符返回,读取的字符给变量ch //读文件
字符串输入函数:fgets(str,n,fp); //读文件内容
// fp为文件类型的指针,指向已打开的文件;str是一个字符串指针;n是一个整型变量,也可以是整型常量或整型表达式。
// 从指定的文件读入n-1个字符存放到由str指向的存储空间中,读入结束后,将自动在最后加一个字符串结束符‘\0’。
fp = fopenfun (file, "r"); /* 打开文件 */
while ( !feof(fp) ) //检测文件结束
{ fgets( str,80,fp ); /*从文件中读出字符串 */
printf ("%s", str);
}
字符串输出:fputs(str,fp); //写入文件内容
gets(str);
fputs(str,fp);
fpurs("\n".fp);
格式化输入函数:fscanf( fp,格式控制串,输入列表);//从fp读文件内容
fscanf(fp, "%d %f", &i , &j);
格式化输出函数:fprintf(fp,格式控制串,输出列表);//写内容到fp指定文件
文件数据块写函数:fwrite(buffer,size,count,fp);//将一组数据写到指定的文件中。
float f[2];
FILE *fp;
for(i=0;i<2;i++)
scanf("%f",&f[i]);
fp=fopen("aa.dat", "wb");
fwrite(f,4,2,fp); //将数组f中的数据写入fp指向的文件中,一次写4个字节,写2次
struct student
{ int num;
char name[20];
char sex;
int age;
}stud[3]={{10101,"Li Lin",'M',18},
{10102,"Zhang Fun",'M',19},
{10104,"Wang Min",'F',20}};
for(i=0;i<3;i++)
fwrite(&stud[i],sizeof(struct student),1,fp);
文件数据块读函数:fread(buffer,size,count,fp);
关闭文件:fclose( );
文件定位函数: fseek rewind ftell
改变文件位置:fseek(fp,offset,position);
//offset是一个长整数,表示指针移动的字节数:为负时,表示向文件头的方向移动;为正时,向文件尾的方向移动;为0时,不移动。//position用来指定指针移动的初始位置,既可以用符号常量名,也可以用对应的整数。
fseek函数的功能是:将文件fp的读写位置指针移到离开起始位置(position)的offset字节处的位置,如果函数读写指针移动失败,返回值为-1。
例如:
fseek(fp,50L,SEEK_SET); 其作用是将文件位置指针移到文件头起始第50个字节处;
fseek(fp,100L,1); 是指将文件位置指针从当前位置向前(文件尾方向)移动100个字节 ;
fseek(fp,-20L,SEEK_END); 将文件位置指针从文件末尾向后(文件头方向)移动20个字节。
将文件指针移到文件的开头:rewind(fp);//函数调用成功返回0值;否则,返回非0值。
位置指针当前值函数 : ftell(fp);
题:文件file1.c的内容连接到文件file2.c的后面
main( )
{ FILE *fp1,*fp2;
int len;
fp1=fopenfun("file1.txt","r");
fp2=fopenfun("file2.txt","a");
rewind(fp1);
while(!feof(fp1))//从头一直循环到fp1文件末尾
fputc(fgetc(fp1),fp2);
fclose(fp1);
fclose(fp2);
}