zoukankan      html  css  js  c++  java
  • Linux C/C++基础——文件(上)

    1.文件指针

    FILE* fp=NULL;

    • fp指针,只调用了fopen(),在堆区分配空间,把地址返回给fp
    • fp指针不是指向文件,fp指针和文件关联,fp内部成员保存在文件的状态
    • 操作fp指针,不能直接操作,必须通过文件库函数来操作fp指针
    • 通过库函数操作fp指针,对文件的任何操作,fp里面成员会相应的变化(系统自动完成)
    • FILE所有平台的名字都一样,FILE是一个结构体,里面的成员功能一样,不同平台成员的名字不一样

    2.文件的操作

    c语言中三个特殊的文件指针(无需定义可直接使用):stdin、stdout、stderr

    3.文件的打开

    文件的路径:

    补充:在VS中,相对路径

    a.编译同时直接运行程序,相对路径,相对于xxxx.vcxproj(项目文件)所在的路径

    b.如果直接在Debug中直接运行程序,相对路径相对于可执行程序

    在Qt中

    a.编译同时直接运行程序,相对路径,相对于项目文件夹所对应的build中的debug所在的路径

    b.如果直接在Debug中直接运行程序,相对路径相对于可执行程序

     

      1 #include<stdio.h>                                                                                            
      2 
      3 int main()
      4 {
      5    FILE*fp=NULL;
      6    //打开成功,返回有效地址
      7    //打开失败,返回NUULL
      8    fp=fopen("./08txt","r");//文件不存在
      9    if(fp==NULL)
     10    {
     11       perror("fopen");
     12       return 0;
     13     }
     14     fclose(fp);
     15     fp=NULL;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
     16     return 0;
     17 }
     18 

      

      4.文件的写入

    #include <stdio.h>
    int fputc(int ch, FILE * stream);
    功能:将ch转换为unsigned char后写入stream指定的文件中,输入的字符最终转化为数字,每次写入一个字符
    参数:
        ch:需要写入文件的字符
        stream:文件指针
    返回值:
        成功:成功写入文件的字符
        失败:返回-1
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
       FILE *fp;
       fp=fopen("08.txt","w");
       if(fp==NULL)
       {
          perror("fopen");
    
          return -1;
       }
       fputc('a',fp);
       fputc('b',fp);
       fputc('c',fp);
       fputc(97,fp);
    
       char ch='a';
       while(ch<='z')
       {
           fputc(ch,fp);
           ch++;
       }
       char buf[]="zxcvbnm";
       int n=strlen(buf);
       for(int i=0;i<n;i++)
       {
          fputc(buf[i],fp);
       }
    
       fclose(fp);
       fp=NULL;
    
       return 0;
    }
    View Code

     5.文件的读

    #include <stdio.h>
    int fgetc(FILE * stream);
    功能:从stream指定的文件中读取一个字符,每次读出一个字符,读完光标自动跳转到下一个字符前
    参数:
        stream:文件指针
    返回值:
        成功:返回读取到的字符
        失败:-1

      文件末尾的判断

    在C语言中,EOF表示文件结束符(end of file)。
    在while循环中以EOF作为文件结束标志,
    这种以EOF作为文件结束标志的文件,必须是文本文件。
    在文本文件中,数据都是以字符的ASCII代码值的形式存放。
    我们知道,ASCII代码值的范围是0~127,不可能出现-1因此可以用EOF作为文件结束标志。
    if(ch==EOF)等价于if(ch==-1)

    当把数据以二进制形式存放到文件中时,就会有-1值的出现,

    因此不能采用EOF作为二进制文件的结束标志。

    为解决这一个问题,ANSI C提供一个feof函数,用来判断文件是否结束。

    feof函数既可用以判断二进制文件又可用以判断文本文件。

     feof(fp);

    • 如果第一次没有对文件进行读操作,直接调用此函数,永远返回假(文件没有到结尾)
    • 此函数必须,先读,再调用feof()才有意义
    • 调用此函数,光标不会自动往后移动
    • 必须读取后,才能判断是否结束,判断的是读取的字符

     

      1#include<stdio.h>                                                                                            
      2 #include<string.h>
      3 
      4 int main()
      5 {
      6    FILE *fp;
      7    fp=fopen("09.txt","w");
      8    if(fp==NULL)
      9    {
     10       perror("fopen");
     11 
     12       return -1;
     13    }
     14    char ch='a';
     15    while(ch<='z')
     16    {
     17        fputc(ch,fp);
     18        ch++;
     19    }
     20    fclose(fp);
     21    FILE *fp1=fopen("09.txt","r");
     22    char chr;
     23    while(1)
     24    {
     25        chr=fgetc(fp1);
     26        printf("chr=%d
    ",chr);//以字符形式输出
     27        if(chr==-1)
       {
     29        break;
     30        }
     31    }
     32    fclose(fp1);
     33    fp=NULL;
     34 
     35    return 0;
     36    }   
    View Code

     

     

    知识的二道贩子,此博客仅仅是个人学习总结!
  • 相关阅读:
    Python类的继承(进阶5)
    面向对象编程基础(进阶4)
    Python模块(进阶3)
    Python函数式编程(进阶2)
    python多线程
    Ternary Search Tree Java实现
    Trie和Ternary Search Tree介绍
    索引时利用K-邻近算法过滤重复歌曲
    Sql排名和分组排名
    Lucene和jackson冲突
  • 原文地址:https://www.cnblogs.com/xiangdongBig1/p/11841054.html
Copyright © 2011-2022 走看看