文件操作
文件
分为程序⽂件、数据⽂件。
文件名
⽂件路径+⽂件名主⼲+⽂件后缀
二进制文件
根据数据的组织形式,数据⽂件被称为⽂本⽂件或者⼆进制⽂件。数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存,就是⼆进制⽂件。
#include <stdio.h>
int main()
{
int a = 10000;
FILE* pf = fopen("test.txt", "wb");
fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
fclose(pf);
pf = NULL;
return 0;
}
文件打开与关闭
流
我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。
标准流
• stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊。
• stdout - 标准输出流,⼤多数的环境中输出⾄显⽰器界⾯。
• stderr - 标准错误流,⼤多数环境中输出到显⽰器界⾯。
文件指针
FILE* pf;
打开与关闭
使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。
/* fopen fclose example */
#include <stdio.h>
int main ()
{
FILE * pFile;
//打开⽂件
pFile = fopen ("myfile.txt","w");
//⽂件操作
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
//关闭⽂件
fclose (pFile);
}
return 0;
}
顺序读写
函数名 功能 适⽤于
fgetc ,字符输⼊函数, 所有输⼊流
fputc ,字符输出函数 ,所有输出流
fgets ,⽂本⾏输⼊函数 ,所有输⼊流
fputs ,⽂本⾏输出函数 ,所有输出流
fscanf ,格式化输⼊函数 ,所有输⼊流
fprintf ,格式化输出函数 ,所有输出流
fread ,⼆进制输⼊ , ⽂件
fwrite ⼆进制输出 , ⽂件
随机读写
fseek;
int main ()
{
FILE * pFile;
pFile = fopen ( "example.txt" , "wb" );
fputs ( "This is an apple." , pFile );
fseek ( pFile , 9 , SEEK_SET );
fputs ( " sam" , pFile );
fclose ( pFile );
return 0;
}
ftell;
int main ()
{
FILE * pFile;
long size;
pFile = fopen ("myfile.txt","rb");
if (pFile==NULL)
perror ("Error opening file");
else
{
fseek (pFile, 0, SEEK_END); // non-portable
size=ftell (pFile);
fclose (pFile);
printf ("Size of myfile.txt: %ld bytes.\n",size);
}
return 0;
}
rewind;
int main ()
{
int n;
FILE * pFile;
char buffer [27];
pFile = fopen ("myfile.txt","w+");
for ( n='A' ; n<='Z' ; n++)
fputc ( n, pFile);
rewind (pFile);
fread (buffer,1,26,pFile);
fclose (pFile);
buffer[26]='\0';
printf(buffer);
return 0;
}