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\n",chr);//以字符形式输出
 27        if(chr==-1)
   {
 29        break;
 30        }
 31    }
 32    fclose(fp1);
 33    fp=NULL;
 34 
 35    return 0;
 36    }   
View Code

 

 

猜你喜欢

转载自www.cnblogs.com/xiangdongBig1/p/11841054.html