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语言着实太多限制,手册也不说明清楚....

posted @ 2016-09-10 22:53  朱小勇  阅读(489)  评论(0编辑  收藏  举报