c语言文件操作总结

#include<stdio.h>


/************************************************************************/
//    FILE *fopen(const char *filename,const char *mode)
// FILE *freopen(const char *filename,const char *mode,FILE *stream)以指定模式打开文件,并将文件关联到stream流中
/*  r 打开文件用于读  
    w 创文本用于写,如果存在文本,则删除文本内容,然后写
    a 打开文本或者创建文本用些追加写
    r+打开文本用于更新,即读和写
    w+ 打开文本用于更新,并删除已经存在的内容
    a+ 打开文本用于更新,写文件追加到末尾         
后3中更新模式,支持对同一文件进行读写,在同读写交叉的操作,需要用fflush来刷新文件内容
rb  w+b表示对二进制文件进行操作       
//将文件读/写指针移到距文件头100字节处     
  fseek( fp,  100L, SEEK_SET );                                  
//将文件读/写指针从当前位置向文件尾方向移50字节  
  fseek( fp,   50L, SEEK_CUR );                          
//将文件读/写指针从当前位置向文件头方向移50字节  
  fseek( fp,  -50L, SEEK_CUR );  
//将文件读/写指针从文件尾回移100字节  
  fseek( fp, -100L, SEEK_END );                                                    */
/************************************************************************/
int main(){
    FILE *fp;
    int re =1;
    int re2 = 10;
    char c ;
    char str[50];
    int iFC = -1; 
    int cnt = 0;
    memset(str,0x00,sizeof(str));
    fp = fopen("d:\t2.txt","a+");

    //文件按行读取
    while (!feof(fp))
    {
        cnt++;
        printf("第%d行
",cnt);
        /**原型是:char *fgets(char *s, int n, FILE *stream);从文件指针stream中读取n-1个字符,存到以s为起始地址的空间里,直到读完一行,如果成功则返回s的指针,否      则返回NULL。*/
        fgets(str,100,fp);
        printf("%s
",str);
        if (cnt==1)
        {
            fgets(str,100,fp);
            printf("%s",str);
            break;
        }
    }

    printf("*****************
");
    fseek( fp,  -2L, SEEK_END );                                  
    c = getc(fp);
    printf("fp = [%c]
",c);
    printf("*****************
");
//     //末尾插入e
//     fseek( fp,  0L, SEEK_END );  
//     putc('e',fp);

    //单个字符打印内容
    fseek( fp,  0L, SEEK_SET );   
    c = getc(fp);
    while(c != EOF){
        printf("fp = [%c]
",c);
        c = getc(fp);
        //char是5多打印一次        
        if(c == '5'){
            fseek(fp,-1L,SEEK_CUR);
            printf("fp = [%c]
",c);
            fseek(fp,1L,SEEK_CUR);
        }
    }
    
    //从头开始读取5个字节(实取4个)
    fseek( fp,  0L, SEEK_SET);   
    fgets(str,59,fp);//sizeof is 5, strlen is 4  because of ''
    printf("str--------> = [%s]
",str);
        
    //从头开始读取6个字节
    fseek( fp,  0L, SEEK_SET);   
    fread( str, 3, 2, fp );  //参数3 size_t表示每个数据项包含的字节数
    printf("str = [%s]
",str);

    //文件尾写入endEND
    fseek( fp,  0L, SEEK_END);   
    fputs("end",fp);
    fseek( fp,  0L, SEEK_CUR);   
    fwrite("END",3,1,fp);
    fseek( fp,  0L, SEEK_END);  
    //   int getline(char s[],int lim) 
  //    fp->getline(str,0);
//文件关闭 iFC = fclose(fp); if (iFC) { printf("Failed to close file!"); } }
原文地址:https://www.cnblogs.com/ashen/p/4471366.html