C语言文件操作
一、打开文件
FILE *fp=NULL;//初始化文件指针变量
fp=fopen("test.text","r");//test.text是文件名,r是模式
if(fp==NULL)
{dosomething}
getchar();//暂时
模式说明:
r:只读方式,不能改变硬盘文件状态。如果文件名不存在,fp就为NULL。
w:只写方式,要改变硬盘文件状态。如果文件文件名不存在,就新建这个文件,如果存在,就删除了再新建。
a:追加模式,可以改变硬盘文件状态,在文件末尾添加新的数据(打开的时候不删除原有数据)。如果文件名不存在,就创建一个新文件。
此外:r+,w+,a+,rw,wr,ar
二、读写文件数据
1、单字节操作
(1)、fgetc():从指定文件中读出一个字节长的数据
char fgetc(FILE *fp);返回数据: 如果是文本文件,返回字符;如果是二进制文件,返回一个字节。(可用r模式)
eg:while(!feof(fp))//判断是否读取到底了
printf("%c",fgetc(fp));//读取
(2)、fputc():把字符写入文件中
char fputc(char ch,FILE *fp);返回数据:写入成功返回写入字符,失败则返回-1。(ch可以是字符常量或者变量,fp模式必须可写,如w、a、r+)
eg:while(1)
{
ch=getchar();
if(ch!='#')
fputc(ch,fp);
else
break;
}
2、字符串操作
(1)、fgets():从指定文本文件中读到一个字符串
char *fgets(char *str,int size,FILE *fp);返回值:str所指向的地址
注意:读到'\n'和'\0'就停止读
(2)、fputs():向指定文件中写入字符串
int fputs(char *str,FILE *fp);返回值:写入成功返回0,失败返回其他。(fp模式包含可写模式)
3、格式化字符串操作函数
(1)、fprintf():按照一定格式向文件中写入数据
int fprintf(FILE *fp,格式化字符串,输出参数列表);fp应包含写方式
eg:fprintf(fp,"i=%d,j=%0.2f",i,j);fprintf(fp,"abcde%s",str);
(2)、fscanf():将某格式的数据从文件中读取出来
int fscanf(FILE *fp,格式化字符串,输入参数列表);fp包含度方式
eg:fscanf(fp,"i=%d,s=%s",&i,str);如果文件中:i=10,s=hello。那么最后i=10,str=hello
4、二进制数据操作函数
(1)、fwrite():向二进制文件中写入数据
int fwrite(unsigned char *buff,int size,int count,FILE *fp);返回值:成功返回1,失败返回其他(fp应包含二进制写入方式,如wb,ab)
(2)、fread():读取二进制文件中的数据
int fread(undigned char *buff,int size,int count,FILE *fp);返回值:成功返回1,失败返回其他(fp应包含二进制读方式,如rb)
三、关闭文件
int fclose (FILE *fp);// 必须要close,不然程序关闭了才完成操作
fflush(FILE *fp);//这样可以不用关闭,也可完成操作
20210717更新:
1、打开文件
FILE *fopen( const char * filename, const char * mode );
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
2、写入文件
int fputc( int c, FILE *fp ); //写入字符 int fputs( const char *s, FILE *fp );//写入字符串
int fprintf(FILE *fp,const char *format, ...)//写入格式化字符串
举例:
#include <stdio.h>
int main()
{
FILE *fp = NULL;
fp = fopen("test.txt", "w+");
fprintf(fp, "This is testing for fprintf...%d\n", 100);
fputs("This is testing for fputs...\n", fp);
fputc('c', fp);
fclose(fp);
}
3、读取文本
int fgetc( FILE * fp ); //返回值是读取的单个字符 char *fgets( char *buf, int n, FILE *fp ); //读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串;在遇到换行符时结束
int fscanf(FILE *fp, const char *format, ...)//格式化读取文件中读取字符串;在遇到空格、换行符时,结束
举例:
#include <stdio.h>
int main()
{
FILE *fp = NULL;
char buff[255];
fp = fopen("test.txt", "r");
fscanf(fp, "%s", buff);
printf("1: %s\n", buff );
fgets(buff, 255, (FILE*)fp);
printf("2: %s\n", buff );
fgets(buff, 255, (FILE*)fp);
printf("3: %s\n", buff );
fclose(fp);
}
4、读写二进制
size_t fread(void *ptr, size_t size_of_elements,
size_t number_of_elements, FILE *a_file);
size_t fwrite(const void *ptr, size_t size_of_elements,
size_t number_of_elements, FILE *a_file);
5、关闭文件
int fclose( FILE *fp );
fflush(FILE *fp);
参考:https://www.runoob.com/cprogramming/c-file-io.html
PS:
1、ftell函数读到0x1C0000(1,835,008字节处就一直返回-1),大概2G
2、fread函数读到0xF8000000(4,160,749,568字节)就一直返回-1,无法再读,大概4G
上述问题主要是因为返回值为long,sizeof一下发现只有4个字节,可能这就是限制原因...
如果需要操作大文件建议用c++吧..c语言着实太多限制,手册也不说明清楚....
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html