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中直接运行程序,相对路径相对于可执行程序

   #include<stdio.h>                                                                                            

   int main()
{
FILE*fp=NULL;
//打开成功,返回有效地址
//打开失败,返回NUULL
fp=fopen("./08txt","r");//文件不存在
if(fp==NULL)
{
perror("fopen");
return ;
}
fclose(fp);
fp=NULL;
return ;
}

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 -;
}
fputc('a',fp);
fputc('b',fp);
fputc('c',fp);
fputc(,fp); char ch='a';
while(ch<='z')
{
fputc(ch,fp);
ch++;
}
char buf[]="zxcvbnm";
int n=strlen(buf);
for(int i=;i<n;i++)
{
fputc(buf[i],fp);
} fclose(fp);
fp=NULL; return ;
}

5.文件的读

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

文件末尾的判断

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

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

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

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

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

feof(fp);

  • 如果第一次没有对文件进行读操作,直接调用此函数,永远返回假(文件没有到结尾)
  • 此函数必须,先读,再调用feof()才有意义
  • 调用此函数,光标不会自动往后移动
  • 必须读取后,才能判断是否结束,判断的是读取的字符
  #include<stdio.h>
#include<string.h> int main()
{
FILE *fp;
fp=fopen("09.txt","w");
if(fp==NULL)
{
perror("fopen"); return -;
}
char ch='a';
while(ch<='z')
{
fputc(ch,fp);
ch++;
}
fclose(fp);
FILE *fp1=fopen("09.txt","r");
char chr;
while()
{
chr=fgetc(fp1);
printf("chr=%d\n",chr);//以字符形式输出
if(chr==-)
{
break;
}
}
fclose(fp1);
fp=NULL; return ;
}

Linux C/C++基础——文件(上)的更多相关文章

  1. Linux小工具:文件上传ftp服务器

    工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...

  2. linux下将本地文件上传到github中?

    今天编写一份Python基础代码,经过Linux上传到github上,遇到点问题,已经解决 1.首先sudo su 进入root 用户 2.ls 检查出当前文件下有什么文件 3. cd 进入你将要上传 ...

  3. linux 客户端与linux服务器端连接与文件上传下载

    linux客户端连接linux服务器 用ssh 可以用 man ssh 查看用法 基本格式: ssh 用户名@主机名 如: ssh root@1.1.1.1 linux客户端上传文件到 linux 服 ...

  4. Linux C/C++基础 文件(下)

    1.fgets和fputs #include <stdio.h> int fputs(const char * str, FILE * stream); 功能:将str所指定的字符串写入到 ...

  5. Linux C/C++基础 文件(中)

    1.ubuntu cat命令的实现 cat——查看或者合并文件内容 #include<stdio.h> int main(int argc,char* argv[]) { //1.打开文件 ...

  6. chattr - 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性

    SYNOPSIS(总览) chattr [ -RV ] [ -v version ] [ mode ] files... DESCRIPTION(描述) chattr 修改文件在Linux第二扩展文件 ...

  7. Linux—文件上传和下载

    一.通过SecureCRT的rz.sz实现文件的上传和下载 1.检查是否安装sz  rz,命令如下 [root@localhost ~]# rpm -qa | grep rz # 上传 [root@l ...

  8. 03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令

    03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-{1..100}-du-cd-cp-file-mv-echo-id-she ...

  9. linux文件上传

    租了个服务器,要把自己打的war包打上去发布,服务器是linux的(本机是mac).以前都是用wget命令,把需要上传的东西先放到github上面再在服务器上用wget命令下载.最近不知道什么原因,w ...

随机推荐

  1. ajax请求自动刷新页面

    ajax是异步请求技术,可以实现页面的局部刷新.但是今天写代码的时候发现每次ajax之后都会发生整个页面的刷新,最后发现这是因为触发ajax事件的input标签的type设置为了submit,所以会产 ...

  2. k8s 1.16.3 yaml声明变化

    apiVersion: apps/v1 #变化的 kind: Deployment metadata: name: taint labels: app: taint spec: replicas: 3 ...

  3. 【Winform-自定义控件】自定义控件学习+一个笑脸控件例子

    1.CompositeControls组合控件:在原有控件的基础上根据需要进行组合 2.ExtendedControls 扩展控件:继承自原有控件,添加一些新的属性和方法,绘制一些新元素 当每个But ...

  4. MySQL错误:ERROR 1067 (42000): Invalid default value for 'timestamp_field'

    数据库报错   ERROR 1067 (42000): Invalid default value for 'start_time' 是因为数据库的配置有问题: 可以看到  NO_ZERO_IN_DA ...

  5. 医院设置x

    医院设置x   题目描述 Description 设有一棵二叉树,如下图 其中,圈中数字表示结点居民的人口.圈边上数字表示结点编号,.现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小, ...

  6. flask框架(六): 实现支持正则的路由

    一:默认路由 @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/pos ...

  7. AtCoder AGC031D A Sequence of Permutations (群论、置换快速幂)

    题目链接 https://atcoder.jp/contests/agc031/tasks/agc031_d 题解 这居然真的是个找规律神题... 首先要明白置换的一些基本定义,置换\(p\)和\(q ...

  8. 谷歌protocolbuff使用说明步骤

    Protocolbuff 目录 1       Protocolbuff定义和作用... 1 2       Protocolbuff的使用步骤... 1 3       .proto编写格式... ...

  9. Java项目框架搭建系列(Java学习路线)

    前言: 已经工作4年,真是时间飞逝. 其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了. 你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务 ...

  10. VLC和Qt结合编写流媒体rtsp播放器

            VLC播放器是一款功能强大且小巧的播放器,它支持多种多样的音视频格式,比如MPEG1,2以及mp3等等.并且通过Qt和VLC的结合能让每个开发者写出自己的视频流媒体播放器.     Q ...