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. [CTF]Heap vuln -- unlink

    0x00: 起因 一直在堆的漏洞利用中不得要领,之前ZCTF又是三个堆的利用,血崩,chxx表哥给写了一个heap的pwn,学习学习. 0x01: 关于heap的unlink的漏洞利用,出的很早,在低 ...

  2. fiddler(四)、断点(转)

    前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神聊天都靠小纸条.某屌丝A男对隔壁小王的隔壁女神C倾慕已久,于是天天小纸条骚扰,无奈中间隔着一个小王,这样小王就负责传小纸条了.有一 ...

  3. Windows下Yarn安装与使用

    参考博客 1.安装yarn 方法一:使用安装包安装 官方下载安装包,https://yarnpkg.com/zh-Hans/docs/install,安装完毕后,一定要配置环境变量. 方法二:使用np ...

  4. Gitee使用方法

    原文链接:https://www.cnblogs.com/yiven/p/8465054.html 1.创建仓库: a.创建远程仓库 登入Gitee后,点击头像旁边的"+"加号-- ...

  5. JSON 转含有泛型属性的对象

    在将 json 字符串转为对象时,如果对象含有泛型,在进行转换时需要指明泛型类型. 1. 对象只含有一个泛型属性时 1.1  代码 /** * @Describe: * @Author: chenfa ...

  6. JVM----Java内存模型与线程

    我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等 ...

  7. wps技巧

    1.页面颜色设置页面布局->背景 2.图片等比例缩放按住shift 3.想任意挪动图片 设置为文字环绕型 4.word由分节符构成.可以看左下角节的显示.一个页可以划分多节.页总数<=节总 ...

  8. MediaFoundation初步研究

    用MediaFoundation写了个媒体播放程序,封装成了DLL,MFVideo.dll,写了个使用例子

  9. js小数点相乘或相除出现多位数的问题

    最近做一个支付的项目需要做个计算器,所以发现了一个问题. 比如: 0.03/0.00003=999.9999999999999 0.0003*0.3=0.000029999999999999997 0 ...

  10. vue——父组件调用子组件

    <template> <div> child1 </div> </template> <script> export default { n ...