C语言文件

来源:互联网 发布:在淘宝上做虚拟充值 编辑:程序博客网 时间:2024/06/07 07:35

一. 文件的分类:

      1. 从用户角度分: 普通文件和设备文件.

      2. 从文件编码方式分:

        (1). 文本文件: 用记事本能正常打开的文件, 如” .txt”, “.c”

        (2). 二进制文件: 用记事本打开为乱码的文件, 如” .mp3”, “ .jpg”

二. 文件的操作:

    一般步骤为:

        (1). 引入头文件(stdio.h).

        (2). 定义文件指针.

        (3). 打开文件.

        (4). 文件读写(同一时间只能读或写, 不要又读又写).

        (5). 关闭文件.

      1. 打开和关闭文件:

         ①. 打开: fopen

              格式为: fopen(文件名, 方式);   如: fopen(“ c:\\a.txt”,“r”);

打开方式

 

r()

打开一个已存在的文件, 准备从文件中读取数据处理不能向文件写数据

w()

创建一个新文件, 准备向文件写入数据, 不能从文件中读取数据. 如果文件已存在, 则覆盖已有文件

a(追加)

打开一个已存在的文件, 准备在文件尾部追加数据. 不能从文件中读取数据, 如果文件不存在, 则创建这个文件准备写入数据

         ②. 关闭: fclose

              格式为: fclose(文件名);

      2. 定义文件指针:

         格式: 文件指针名=文件函数(文件名, 方式);  如:

                 FILE *file=fopen(“ c:\\a.txt”, “r”);

      3. 文件函数名:

         (1). fgetc(读一个字符) 和 fputc(写一个字符):

                 ①. fgetc函数格式: fgetc(指针文件);

                                    如: fgetc (file);

                 ②. fputs函数格式: fputc(字符或数字变量, 指针文件);

                                  如: fputc ( chTemp, file );

            fgetc用法:                                                                                    fputc用法: 

int main(int argc , char   **argv )                                                   int main( int argc ,char   **argv )

{                                                                                                   {

      char  chTemp = 0;                                                                         char  chTemp= 0;

      const char* pFileName = "c:\\a.txt";   // 定义文件指针.                       constchar * pFileName = "c:\\a.txt";  // 定义指针文件

      FILE* file = fopen( pFileName , "r");    // 以r(读)的方式打开文件.           FILE*file = fopen( pFileName ,"w" );   // 以w(写)的方式打开文件

 

      if( NULL == file )         // 判断是否打开成功.                                       if(NULL == file )                     // 判断是否打开成功

      {                                                                                                   {

           printf( " The fileopen failed ... \n" );                                               printf( " The file open failed ... \n"); 

           return 0;                                                                                       return 0;

      }                                                                                                   }

                                                                                                         printf( "请输入:" );

      while(1)                                                                                         while(1)    

      {                                                                                                   {

           chTemp =  fgetc( file );      //读字符                                                 chTemp= getch();

           if( EOF == chTemp)         //判断结束. EOF返回值为-1                       if( 27 == chTemp )       // esc 键退出

           {                                                                                                   {

                 break;                                                                                          break;

           }                                                                                                   }

           printf("%c",  chTemp );                                                                 if( '\r' == chTemp )

      }                                                                                                         {

      fclose( file );                     //打开了后一定要关.                                              putchar( '\n' );            // 输入 '\r', 输出 '\n'

                                                                                                                                fputc( '\n', file );          //把\n写入文件

      return 0;                                                                                              {

}                                                                                                            else

                                                                                                                {

                                                                                                                      putchar(chTemp); // 回显

                                                                                                                      fputc(chTemp, file ); // 写文件

                                                                                                                }

                                                                                                          }

fclose( file );

 

                                                                                                          return0;

                                                                                                     }

 

         (2). fgets(读一个字符串) 和 fputs(写入一个字符串):

               ①. fgets函数格式:fgets(字符串指针, 数量, 文件指针);

                                  如: fgets(pBuffer, 100, file);

                        结束:  a. 读完限定数量后结束.

                                b. 读到回车结束.


                 ②. fputs函数格式:fputs(字符串指针,  文件指针);                

  ※ 读完后输出的串和原串不同. 原串                

输出后的新串

                 如: fputs( pUserArray[i].m_szName, file );   

                 fgets用法:                                                                                 fputs用法:

int main(int argc , char   **argv )                                                   struct stUser

{                                                                                                   {

      char * pBuffer = (char*)malloc( sizeof(char)*100 );                       char  m_szName[100];

      const char* pFileName = "c:\\user.ini";           // 定义指针文件             char  m_szPasswd[7];

      FILE* file = NULL;                                                                   };  

      file = fopen( pFileName , "r" );       // 以r方式打开文件                                                                                     

                                                                                                    int main( int argc , char   **argv )

      if( NULL == file )         // 判断是否成功打开                                         {   

      {                                                                                                  char * pBuffer = (char*)malloc( sizeof(char )*100 );

           printf( " The fileopen failed ... \n" );                                          const char *pFileName = "c:\\userInput.ini";       //定义指针文件

           return 0;                                                                                  FILE*file = NULL;

      }                                                                                                                                                    

                                                                                                          int i = 0;

      while(1)                                                                                         //定义结构指针

      {                                                                                                  struct stUser* pUserArray = (struct stUser*)malloc(sizeof(struct stUser )*3 );

           memset( pBuffer, 0, 100 );

           fgets( pBuffer, 100, file );                                                          for( i=0; i<3; ++i )

           if( 0 == strlen(pBuffer) )    // 判断结束, 一定要有, 不然就算              {

           {                                       文件结束了, 还会照样读, 就出错了              printf("请输入用户名: " );

                 break;                                                                                      gets( pUserArray[i].m_szName );

           }                                                                                                  printf( "请输入密码:" );

           printf( "%s",pBuffer );   // 回显(不用加’\n’, fgets会自动加)                   gets( pUserArray[i].m_szPasswd );

      }                                                                                                   }

                                                                                                         /*

      fclose( file );                                                                                  for( i=0; i<3; ++i)            //测试是否输入成功

      free( pBuffer );                                                                              {

                                                                                                               printf( "用户名: %s\n",pUserArray[i].m_szName );

      return 0;                                                                                             printf( "密码: %s\n: ", pUserArray[i].m_szPasswd  );

}                                                                                                        }*/

          

                                                                                                          file= fopen( pFileName , "w" );

                                                                                                         if( NULL == file )         // 判断是否成功打开

{

      printf( " The file open failed ... \n");

      return 0;

}

 

for( i=0; i<3; ++i )

{

      fputs("[user]\n", file  );

      fputs("name=", file  );

fputs(pUserArray[i].m_szName, file );    // 保存名字

      fputc('\n', file );

      fputs("passwd=", file  );

fputs(pUserArray[i].m_szPasswd, file  );  // 保存密码

      fputc('\n', file );   

}

      free(pUserArray);

      fclose(file);

      return 0;

}

         (3). fprintf 和 fscanf: 格式化的文件读写.

                 ①. fprintf函数格式: fprintf(文件指针, 格式字符串,  对应类型的内容);

                                       如:fprintf(  file,  "%s %d %c\n"  , "zhang", 20, 'M' )

                 ②. fscanf函数原形:fscanf(文件指针, 格式字符串, 对应类型的指针);

                                       如:fscanf( file, "%s %d %c" , pName, &nAge, &chSex );

            用法: int main(int argc , char   **argv )

{

   // 写文件

   char * pName = (char*)malloc(  sizeof(char)*100 );

   int nAge = 0;

   char  chSex= 0;

   const char *pFileName = "c:\\userInput.ini";

   FILE*file = NULL;

   int i = 0;

   file =fopen( pFileName , "w" );

   if( NULL == file )

   {

        printf( " The file open failed ... \n");

        return 0;

   }  

   fprintf(  file,  "%s %d %c\n"  , "zhang", 20, 'M' );

   fprintf(  file,  "%s %d %c\n"  , "li", 30, 'F' );   

   for( i=0; i<2;  ++i )    //要把前面的打开方式改为”r”才能用  

// 读文件

   {

        fscanf( file, "%s %d %c" ,  pName, &nAge, &chSex );

        printf( "%s, %d, %c \n", pName, nAge,chSex );

   }

   free(pName);

   fclose(file  );

   return 0;

}                                                                                   

※ 总结: 前面几种文件操作的使用方式对比

文件操作

fgetc

fputc

fgets

fputs

fprintf

fscanf

 

 

 

 

定义一个变量

定义const文件指针

以”r”方式打开 (FILE *file)

判断是否空指针

死循环读字符

判断EOF

关闭文件

定义一个变量

定义const文件指针

以”w”方式打开(FILE *file)

判断是否空指针

用死循环接收键盘输入(getch)

接受ESC键结束和’\r’输出’\n’

fputc写入文件

关闭文件

定义动态数组指针

定义const文件指针

以”r”方式打开

判断是否空指针

死循环

memset指针数组

fgets把文件读取到数组指针

打印数组指针

释放数组指针内存

关闭文件

定义结构和定义动态数组指针

定义const文件指针

FILE *file置为空

动态初始化结构指针(根据要求个数)

for循环接收输入

以”w”方式打开文件

判断是否空指针

for循环保存到文件(fputs)

释放数组指针内存

关闭文件

定义变量或动态数组

定义const文件指针

FILE *file置为空

以”w”方式打开文件

判断是否空指针

按格式调用fprintf

释放内存

关闭文件

定义变量或动态数组

定义const文件指针

FILE *file置为空

以”w”方式打开文件

判断是否空指针

按格式调用fscanf

释放内存

关闭文件

         (4). sprintf 和sscanf

      ①. sprintf: sprintf(buf, “>>> %s<<<” , a);

           <==>strcpy(buf, “>>>”);

                    strcat(but, a);

                              strcat(but, “<<<”);

                 ②. sscanf:

         (5). fread和fwrite:

                 ①. fread: 用来读一组数据(缓冲区, 数据区大小, 数据块块数, 文件指针).

                         函数原形: int fread(void*buffer, size_t size, size_t num, FILE *stream); 如:

                                       fread( a, sizeof(int), 10, file);

               ②. fwrite: 用来写一组数据(缓冲区, 数据区大小, 数据块块数, 文件指针), 如一个数组元素, 一个结构变量的值.

                          函数原形: int fwrite(void*ptr,int size, intnitems, FILE *stream);

                                        fwrite( a, sizeof(int),10, file);

                      举例:

struct stPerson

{

      char m_szName[100];

      int m_nAge=0;

      char m_chSex;

};

struct stPerson *Wang=(structstPerson*)malloc(sizeof(struct stPerson));

fwrite( Wang, sizeof(structstPerson), 1, file);

           ※ 如果未知要打开或写入的文件的类型的话:

                     fwrite( a, seziof(char), sizeof (a), file);

         (6). fseek和ftell:

                  ①. fseek:

                      a. fseek(file 100, SEEK_SET); // 从文件开头看起.

                      b. fseek(file 100, SEEK_ CUR);      // 从文件当前位置(指针指向)看起.

                      c. fseek(file 100, SEEK_SET);   // 从文件结尾看起.        

                  ②. ftell: ftell(字符串指针);

                      功能: 统计长度.

                      fseek(file, 0, SEEK_END);

                      intnRt=ftell(file);   // 意义:快速定位, 统计文件长度.

         (7). feof(文件指针):

              文件结束检测函数

                 if(! feof(file) )

                 {

                      …;

                 }

1 0
原创粉丝点击