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. 根据传入url请求,返回json字符串

    /** * 根据传入url请求,返回json字符串 * @param url * @return * @throws UnsupportedEncodingException */ public st ...

  2. PPM / PGM / PBM 图像文件格式[转]

    下面将详细介绍ppm文件 ppm文件是一种图像文件,有其自己的文件格式.ppm文件由两个部分组成:第一个部分是三行ASCII码,这个部分决定了图像的存储格式以及图像的特征:第二个部分就是图像的数据部分 ...

  3. django之ORM的查询优化、Ajax 06

    目录 ORM查询优化 only与defer select_related与prefetch_related查询优化 choices参数 MTV与MVC模型 Ajax简介 AJAX常见应用情景 AJAX ...

  4. JS单线程和异步

    线程和单线程的概念: 线程:是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同 ...

  5. yii 上传视频(ajax)

    实现一个功能:提交表单的时候,需要上传视频,把视频上传到oss上,然后把url作为表单值传到后端保存到数据库.需要ajax异步实现. 遇到了一个这样报错:Bad Request: 您提交的数据无法被验 ...

  6. LNMP源码编译

    LNMP源码编译 编译安装之前把开发包组安装了 [root@tiandong63 ~]# yum groupinstall "Development Tools" "De ...

  7. 尚学堂requireJs课程---2、模块

    尚学堂requireJs课程---2.模块 一.总结 一句话总结: # 将代码以及使用放到独立的闭包中去,并且赋值给了变量,便于外部访问 # return出了函数和变量(放在一个json对象中) # ...

  8. legend3---lavarel安装debugbar工具条

    legend3---lavarel安装debugbar工具条 一.总结 一句话总结: ` lavarel插件一般是composer官网下载,然后config/app.php中声明和加别名 ` 直接照官 ...

  9. If表达式 kotlin(8)

    If表达式 在 Kotlin 中, if 是一个表达式,即它会返回一个值. 因此就不需要三元运算符(条件 ? 然 后 : 否则) ,因为普通的 if 就能胜任这个角色. // 传统用法 var max ...

  10. centos7.2 安装nginx+php

    Nginx的安装 安装快速HTTP服务器“的Nginx”并配置HTTP服务器# install from EPEL [root@linuxprobe~]# yum --enablerepo=epel ...