文件的操作,可以理解为输出输入终端为文件,通常我们的输入输出都是显示屏,其实原理一样,都是先将数据写入到内存,然后在从内存写到终端(显示器或者文件)
文件操作的主要步骤
1、打开文件,得到将要操作的文件的指针
2、设置文件指针的位置,打开文件时,默认指向文件的开头,以追加方式打开文件时,指向文件的末尾
3、读写文件
4、关闭文件,切记不要忘了这一步,否则造成输入、输出的内容不能正常保存到文件,因为,计算机向文件中保存文件,是先将数据写到缓冲区,当缓冲区满了之后,再一起写入到文件,所以如果忘了,可能造成文件内容确实,也可以写文件写完后,刷新以下缓存,fflush()。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SUCCESS 1
#define ERROR -65535
/*文件使用方式
1、r(只读),若使用该方式打开文件,则只能读取文件中的内容,另外打开的文件必须是已经存在的文件,若不存在,会提示错误。
2、w(只写),若使用该方式打开文件,则只能向文件中写数据,若打开的是一个已经存在的文件,会先删除原来文件的内容,用新的文件内容覆盖,若打开的文件不存在,会创建一个该名字的文件,并写入数据
3、a(追加),打开一个文件,将新的内容插入到原来内容的末端,若打开的文件不存在,会提示错误
4、b(二进制文件),通常和r,b,w结合起来使用,只是打开文件的文件是一个二进制的文件,默认的是文本文件
5、r+(读写),打开一个已经存在的文件,读或者写内容进去,注意该文件必须已经存在
6、w+(读写),新建一个文件,文件可以存在,也可以不存在,若存在,则先删除源原文件内容,再写入新的内容
7、a+(读写),打开一个存在的文件,新的内容插入到原来内容后面
*/
/*文件操作的步骤
1、打开文件,返回文件的指针fopen("filepath","mode")
2、操作文件,读写操作fread、fwrite、fgets、fputs、fgetc、fputc、fscanf、fprintf
3、关闭文件fclose(*fp)
*/
/*文件操作常用的函数
1、ch = fgetc(fp),从文件中读取一个字符,返回给ch,遇到文件结束符,返回EOF(-1)
2、fputc(ch,fp),向文件中写入一个字符,将字符ch写入到文件中,写成功,返回写入的字符;写失败,返回EOF(-1)
注意:打开文件的时候,文件指针指向开头的地方,读取一个或者写一个,指针向后移动,到达文件尾部,有一个文件结束符EOF
3、fread(buff,size,count,fp);从文件中读取内容,buff保存从文件中读取的内容,size是单个buff结构的大小,count表示一次要从文件中读取多少个这样的结构,fp表示文件指针,size决定了每次从文件中读取多少字节的内容
4、fwrite(buff,size,count,fp);向文件中写入内容,buff保存从文件中读取的内容,size是单个buff结构的大小,count表示一次要从文件中读取多少个这样的结构,fp表示文件指针,size决定了每次从文件中读取多少字节的内容
5、fprintf(fp,格式字符串,输出列表),格式化输出,和printf用法一样,只不过这个用于将内容格式化输出到磁盘文件上,而不是格式化输出到终端上
6、fscanf(fp,格式字符串,地址列表),格式化输出,和scanf用法一样,只不过这个用于从磁盘文件上读取数据保存在指定的地址上
文件的定位,文件指针的定位
7、rewind(fp):将文件指针指向文件的开头位置
8、fseek(fp,偏移量,文件指针起始位置),将文件指针按照起始位置作位置偏移,文件指针的起始位置可以有三种:起始位置(SEEK_SET 0)、当前位置(SEEK_CUR 1)、末尾位置(SEEK_END 2)
9、ftell(fp),返回文件指针当前的位置,相对于文件头位置的偏移量。通过这三个函数,组合可以返回文件的字节数,先将文件指针置于末端,然后返回文件指针的位置,即可得到文件的大小
*/
/*只写的方式打开一个不存在的文件,会提示错误*/
#if 0
int main()
{
FILE *pFile = NULL;
pFile = fopen("./file.txt","r");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
fclose(pFile);
return SUCCESS;
}
#endif
/*只读的方式打开一个不存在的文件,若文件不存在,会创建一个新文件*/
#if 0
int main()
{
FILE *pFile = NULL;
pFile = fopen("./file.txt","w");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个文件,若文件不存在,会创建一个新文件,向文件中写入一个字符串*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[255] = {"hello,this is ducument operation!\r\n"};
int len = strlen(buff);
int i = 0;
pFile = fopen("./file.txt","w");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
/*逐个字符的往文件中写入*/
for(i = 0;i < len;i++)
{
fputc(buff[i],pFile);
}
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个已存在的文件,读取文件中的一个字符*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[100];
int i = 0;
char ch;
pFile = fopen("./file.txt","r");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
while((ch = fgetc(pFile)) != EOF)
{
buff[i] = ch;
++ i;
if(i >= 99)
{
break;
}
}
buff[i] = '\0';
printf("C语言——文件的操作-shs文件怎么打开",buff);
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个已存在的文件,向文件中写入内容*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[255] = {"hello,this is ducument operation!\r\n"};
pFile = fopen("file.txt","w");
if(pFile == NULL)
{
printf("open file failed!\r\n");
return ERROR;
}
if(fwrite(buff,10,3,pFile) != 3)//向文件中写入10个字节的数据到缓冲区,写入3次,说明总共写入了30个字节
{
printf("write file failed!\r\n");
}
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个已存在的文件,读取文件中的内容*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[100];
memset(buff,0,sizeof(buff));
pFile = fopen("file.txt","r");
if(pFile == NULL)
{
printf("open file failed!\r\n");
return ERROR;
}
if(fread(buff,10,2,pFile) != 2)//从文件中读取10个字节的数据到缓冲区,读取2次,说明总共读取了20个字节
{
printf("read file failed!\r\n");
}
printf("
文件的操作,可以理解为输出输入终端为文件,通常我们的输入输出都是显示屏,其实原理一样,都是先将数据写入到内存,然后在从内存写到终端(显示器或者文件)
文件操作的主要步骤
1、打开文件,得到将要操作的文件的指针
2、设置文件指针的位置,打开文件时,默认指向文件的开头,以追加方式打开文件时,指向文件的末尾
3、读写文件
4、关闭文件,切记不要忘了这一步,否则造成输入、输出的内容不能正常保存到文件,因为,计算机向文件中保存文件,是先将数据写到缓冲区,当缓冲区满了之后,再一起写入到文件,所以如果忘了,可能造成文件内容确实,也可以写文件写完后,刷新以下缓存,fflush()。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SUCCESS 1
#define ERROR -65535
/*文件使用方式
1、r(只读),若使用该方式打开文件,则只能读取文件中的内容,另外打开的文件必须是已经存在的文件,若不存在,会提示错误。
2、w(只写),若使用该方式打开文件,则只能向文件中写数据,若打开的是一个已经存在的文件,会先删除原来文件的内容,用新的文件内容覆盖,若打开的文件不存在,会创建一个该名字的文件,并写入数据
3、a(追加),打开一个文件,将新的内容插入到原来内容的末端,若打开的文件不存在,会提示错误
4、b(二进制文件),通常和r,b,w结合起来使用,只是打开文件的文件是一个二进制的文件,默认的是文本文件
5、r+(读写),打开一个已经存在的文件,读或者写内容进去,注意该文件必须已经存在
6、w+(读写),新建一个文件,文件可以存在,也可以不存在,若存在,则先删除源原文件内容,再写入新的内容
7、a+(读写),打开一个存在的文件,新的内容插入到原来内容后面
*/
/*文件操作的步骤
1、打开文件,返回文件的指针fopen("filepath","mode")
2、操作文件,读写操作fread、fwrite、fgets、fputs、fgetc、fputc、fscanf、fprintf
3、关闭文件fclose(*fp)
*/
/*文件操作常用的函数
1、ch = fgetc(fp),从文件中读取一个字符,返回给ch,遇到文件结束符,返回EOF(-1)
2、fputc(ch,fp),向文件中写入一个字符,将字符ch写入到文件中,写成功,返回写入的字符;写失败,返回EOF(-1)
注意:打开文件的时候,文件指针指向开头的地方,读取一个或者写一个,指针向后移动,到达文件尾部,有一个文件结束符EOF
3、fread(buff,size,count,fp);从文件中读取内容,buff保存从文件中读取的内容,size是单个buff结构的大小,count表示一次要从文件中读取多少个这样的结构,fp表示文件指针,size决定了每次从文件中读取多少字节的内容
4、fwrite(buff,size,count,fp);向文件中写入内容,buff保存从文件中读取的内容,size是单个buff结构的大小,count表示一次要从文件中读取多少个这样的结构,fp表示文件指针,size决定了每次从文件中读取多少字节的内容
5、fprintf(fp,格式字符串,输出列表),格式化输出,和printf用法一样,只不过这个用于将内容格式化输出到磁盘文件上,而不是格式化输出到终端上
6、fscanf(fp,格式字符串,地址列表),格式化输出,和scanf用法一样,只不过这个用于从磁盘文件上读取数据保存在指定的地址上
文件的定位,文件指针的定位
7、rewind(fp):将文件指针指向文件的开头位置
8、fseek(fp,偏移量,文件指针起始位置),将文件指针按照起始位置作位置偏移,文件指针的起始位置可以有三种:起始位置(SEEK_SET 0)、当前位置(SEEK_CUR 1)、末尾位置(SEEK_END 2)
9、ftell(fp),返回文件指针当前的位置,相对于文件头位置的偏移量。通过这三个函数,组合可以返回文件的字节数,先将文件指针置于末端,然后返回文件指针的位置,即可得到文件的大小
*/
/*只写的方式打开一个不存在的文件,会提示错误*/
#if 0
int main()
{
FILE *pFile = NULL;
pFile = fopen("./file.txt","r");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
fclose(pFile);
return SUCCESS;
}
#endif
/*只读的方式打开一个不存在的文件,若文件不存在,会创建一个新文件*/
#if 0
int main()
{
FILE *pFile = NULL;
pFile = fopen("./file.txt","w");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个文件,若文件不存在,会创建一个新文件,向文件中写入一个字符串*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[255] = {"hello,this is ducument operation!\r\n"};
int len = strlen(buff);
int i = 0;
pFile = fopen("./file.txt","w");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
/*逐个字符的往文件中写入*/
for(i = 0;i < len;i++)
{
fputc(buff[i],pFile);
}
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个已存在的文件,读取文件中的一个字符*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[100];
int i = 0;
char ch;
pFile = fopen("./file.txt","r");
if(pFile == NULL)
{
printf("the file open failed!\r\n");
return ERROR;
}
while((ch = fgetc(pFile)) != EOF)
{
buff[i] = ch;
++ i;
if(i >= 99)
{
break;
}
}
buff[i] = '\0';
printf("%s",buff);
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个已存在的文件,向文件中写入内容*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[255] = {"hello,this is ducument operation!\r\n"};
pFile = fopen("file.txt","w");
if(pFile == NULL)
{
printf("open file failed!\r\n");
return ERROR;
}
if(fwrite(buff,10,3,pFile) != 3)//向文件中写入10个字节的数据到缓冲区,写入3次,说明总共写入了30个字节
{
printf("write file failed!\r\n");
}
fclose(pFile);
return SUCCESS;
}
#endif
/*打开一个已存在的文件,读取文件中的内容*/
#if 0
int main()
{
FILE *pFile = NULL;
char buff[100];
memset(buff,0,sizeof(buff));
pFile = fopen("file.txt","r");
if(pFile == NULL)
{
printf("open file failed!\r\n");
return ERROR;
}
if(fread(buff,10,2,pFile) != 2)//从文件中读取10个字节的数据到缓冲区,读取2次,说明总共读取了20个字节
{
printf("read file failed!\r\n");
}
printf("%s",buff);
fclose(pFile);
return SUCCESS;
}
#endif
/*通过文件指针的操作,获取文件中文件的大小*/
#if 1
int main()
{
int len = 0;
FILE *pFile = NULL;
pFile = fopen("file.txt","r");
if(pFile == NULL)
{
printf("open file failed!\r\n");
return ERROR;
}
fseek(pFile,0,SEEK_SET);//将文件指针置于文件开头的地方
fseek(pFile,0,SEEK_END);//将文件指针置于文件末尾的地方
len = ftell(pFile);
printf("file len is %d",len);
return SUCCESS;
}
#endif
",buff);fclose(pFile);
return SUCCESS;
}
#endif
/*通过文件指针的操作,获取文件中文件的大小*/
#if 1
int main()
{
int len = 0;
FILE *pFile = NULL;
pFile = fopen("file.txt","r");
if(pFile == NULL)
{
printf("open file failed!\r\n");
return ERROR;
}
fseek(pFile,0,SEEK_SET);//将文件指针置于文件开头的地方
fseek(pFile,0,SEEK_END);//将文件指针置于文件末尾的地方
len = ftell(pFile);
printf("file len is 0",len);
return SUCCESS;
}
#endif