程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。
数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
1.文件的打开和关闭
FILE * pf ; // 文件指针变量
// 打开文件FILE * fopen ( const char * filename , const char * mode );// 关闭文件int fclose ( FILE * stream );
#include <stdio.h>
int main ()
{
FILE * pFile;
//打开文件
pFile = fopen ("myfile.txt","w");
//文件操作
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
//关闭文件
fclose (pFile);
}
return 0;
}
2.文件写入
1、字符写入:fputc();
//参数1:写入的字符
//参数2:文件流
//作用:将单个字符写入到文件中
//返回值:成功时,返回写入字符的ascii码值,错误返回EOF(-1)
int fputc(int c, FILE *stream);
2、字符串写入:fputs();
//参数1:写入的字符串
//参数2:文件流
//作用:将字符串写入文件中
//返回值:返回一个非负值,如果发生错误则返回 EOF(-1)。
int fputs(const char *s, FILE *stream);
3、数据块写入:fwrite();
//参数1:要获取的数据的地址
//参数2:要写入内容的单字节数
//参数3:要写入size字节的数据项的个数
//参数4:目标文件指针
//返回值:返回实际写入的数据块的数目
//作用:向文件写入数据块,以二进制形式对文件进行操作,不局限于文本文件。
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
4、格式化写入:fprintf();
//参数1:目标文件指针
//参数2:指定的格式控制字符串
//参数3:各种输出项,与格式控制字符串中的字段一起写到文件中
//返回值:执行成功返回实际写入文件的字符个数;执行失败,返回负数
//作用:用来将输出项按指定的格式写入到指定的文本文件中。
int fprintf(FILE *stream, const char *format, ...);
3.文件读取
1、字符读取:fgetc()
//参数1:目标文件指针
//返回值:执行成功返回读取的字符,读取错误或者遇到结束标志EOF,返回EOF
//作用:从指定的文件中读取一个字符
int fgetc(FILE *stream);
2、字符串读取:fgets()
//参数1:存储读取的数据
//参数2:存储数据的大小
//参数3:要读取的文件流
//返回值:成功则返回读取的buf,失败则返回NULL,这是,buf中的数据不确定
//作用:读取指定场长度的字符串存到字符数组中。每次只读取一行,每次最多读bufsize-1个字符(第bufsize个字符赋'\0')
fgets在取字符串时遇到\n会结束,所以要读完两行必须用两遍fgets,
char *fgets(char *buf, int bufsize, FILE *stream);
3、数据块读取:fread()
//参数1:存储读取的数据
//参数2:要读取的每个数据项的字节数
//参数3:要读取的数据项的个数
//参数4:读取的文件流
//返回值:返回真实读取的数据项count数,错误时返回0
//作用:一次读取文件中由若干个数据项组成的数据块,数据块的大小取决于数据项的大小和数据项的个数。
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
4、格式化读取:fscanf()
//参数1:读取的文件流
//参数2:读取的字符格式
//参数3:读取的各个输入项
//返回值:成功则返回读入的参数个数,失败返回EOF
//作用:根据数据格式format从文件流中读取数据,遇到空格或换行结束。
int fscanf(FILE*stream,const char*format,[argument...]);
4.文件的随机读写
4.1 fseek 根据文件指针的位置和偏移量来定位文件指针
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
FILE* pFile = fopen("D:\\visual\\work\\test_9_21\\test_9_21\\example.txt", "wb");
fputs("This is an apple.", pFile);
fseek(pFile, 9, SEEK_SET);
fputs(" sam", pFile);
fclose(pFile);
return 0;
}
4.2ftell 返回文件指针相对于起始位置的偏移量。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
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;
}
4.3rewind 让文件指针的位置回到文件的起始位置
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
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';
puts(buffer);
return 0;
}