预编译器内置宏

__LINE__    行数
__TIME__    时间
__FUNCTION__   函数
__FINE__     文件名

调用

void ioStreamPoint() {char write_buf[32] = "Hello Word !!";//fd是当前文件的的标示int fd;//O_RDWR 可读写 O_CREAT 创建 O_TRUNC 文件清空//open导入的是#include <io.h>和#include <fcntl.h>两个头if ((fd = open("../example_63.c", O_RDWR | O_CREAT | O_TRUNC)) ==-1)my_err("open", __LINE__);else {printf("Creat file success !!\n");}//写入文件,write 的返回值是实际写入的字节数if (write(fd, write_buf, strlen(write_buf)) != strlen(write_buf)) my_err("write", __LINE__);int ret = my_read(fd);printf("my_read . ret = %d\n", ret);printf("/*-----------------继续写入write_buf-------------------*/\n") ;if(lseek(fd,10,SEEK_END)== -1) //从文件结尾处向后移动10位my_err("lseek",__LINE__) ; //_LINE_  预编译器内置宏,表示行数if(write(fd,write_buf,strlen(write_buf)) != strlen(write_buf) ) //写入文件,write 的返回值是实际写入的字节数my_err("write",__LINE__) ;
}

my_read 函数 :

1.实际它必须在ioStreamPoint之前申明
2.逻辑其实就是将文件指针先移动到结尾(SEEK_END),然后使用(SEEK_CUR)的出到文件头的距离,即文件大小。
3.read方法也可以返回实际读取到的文件大小(str)。

int my_read(int fd) //读数据函数
{int len;int ret;int i;char read_buf[64];if ((lseek(fd, 0, SEEK_END)) == -1) //移动文件指针到结尾my_err("lseek", __LINE__); //__LINE__  预编译器内置宏,表示行数if ((len = lseek(fd, 0, SEEK_CUR)) == -1) //求相对于文件开头的偏移量,用于表明文件开始处到文件当前位置的字节数 lenmy_err("lseek", __LINE__);if ((lseek(fd, 0, SEEK_SET)) == -1) //移动文件指针到开头my_err("lseek", __LINE__);printf(" 字节数是 : %d \n", len);if ((ret = read(fd, read_buf, len)) < 0) //成功时返回实际读到的字节数,失败返回 -1my_err("read", __LINE__);for (i = 0; i < len; i++)printf("%c", read_buf[i]);printf("\n");return ret;
}

my_err:输出错误提示

void my_err(const char *err_string, int line) {//fprintf()函数根据指定的格式(format)向输出流(stream)写入数据,把后面的写到前面fprintf(stderr, "line:%d ", line); perror(err_string);//先输出err_string ,再输出错误原因exit(1);
}

输出结果:

Creat file success !!
字节数是 : 13
Hello Word !!
my_read . ret = 13
/*-----------------再次写入write_buf-------------------*/字节数是 : 36
Hello Word !!          Hello Word !!

方式二:

文件流提供以下成员函数来读取或配置文件指针:

tellg()      返回读取文件指针的当前位置
tellp()      返回写入文件指针的当前位置
seekg(指针偏移量)      将读取文件指针移到指定位置
seekg(指针偏移量,参照位置)      将读取文件指针移到指定位置
seekp(指针偏移量)      将写入文件指针移到指定位置
seekp(指针偏移量,参照位置)  将写入文件指针移到指定位置
这些成员函数名和参数,容易混淆,下面就简单解释一下:备注:以上函数中的最后一个字母不是g就是p,代表什么意思呢?其中,g代表get,表示读取;p代表put,表示写入。
另外,函数参数中的“文件中的位置”和“指针偏移量”为 long整型,以字节为单位。“参照位置”是一个有以下值的枚举:
ios::beg      文件开头计算偏移量
ios::cur      文件当前位置计算偏移量
ios::end      文件结尾计算偏移量

实例

    ifstream fs_in;fs_in.open("../example_63.c",ios::in);if (!fs_in) my_err("read", __LINE__);char buff[1024] = {0};//通过getline函数读取字符串fs_in.getline(buff, 1024);        cout << "buff = " << buff << endl;fs_in.seekg(ios::end);long size = fs_in.tellg();cout << "文件大小:" << size << endl;fs_in.close();

输出:
1.并没有预期的32字节
2.getline方法遇到‘\0’将会停止读取。

buff = Hello Word !!
文件大小:2

总结:

1.文件指针能帮助我们继续添加内容,而避免覆盖。
2.文件指针能得到文件的大小
3.fcntl.h更加简单的操作IO流。

C++IO流文件指针相关推荐

  1. 一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出

    一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出 今天我们使用NPOI类库读写xlsx文件, 最终实现的效果如图所示 从太平洋官网下载相应的类库,大概4~5MB,不要从github ...

  2. JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)

    JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入) 开发流程:需求文档 接口文档 效果图 开发环境统一:JDK1.8 IDEA win10 GIT SSM SSH SpringB ...

  3. java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流

    一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...

  4. java IO流文件的读写具体实例

    IO流的分类: 1.根据流的数据对象来分: 高端流:所有的内存中的流都是高端流,比如:InputStreamReader   低端流:所有的外界设备中的流都是低端流,比如InputStream,Out ...

  5. java io流文件损坏_java使用io流下载.docx. xlsx文件,出现文件损坏提示

    介绍 在使用io流下载服务器上的资源文件时,出现以下提示:但是选择"是"后文件可以正常打开 参考 代码如下: [codesyntax lang="java"] ...

  6. C++基础(四) 文件流 I/O流 文件指针 tellg tellp seekp seekg

    C++中的有关文件的设计,由于历史原因,着实不太好用,里面的坑很多. 一.常见文件打开方式 文件模式常量含义 常量 含义 ios_base::in 以读的方式打开文件 ios_base::out 以写 ...

  7. IO流(文件流 , 缓冲流 , 对象流, 字符流 )

    IO流父类 输入流InputStream : 硬盘–>内存 输出流OutputStream : 内存–>硬盘 文件流(FileInputStream 和FileOutputStream) ...

  8. 【java学习笔记-io流 文件读写和键盘读写】带缓存的输入/输出流和数据输入/输出流

    文章目录 字节流类 带缓存的输入/输出流 BufferedReader与BufferedWriter类 下面的例子程序演示了read()方法,从控制台读取字符直到用户键入"q": ...

  9. IO流文件的相对路径及获取系统路径方法

    本机测试的时候经常没有问题,但是一上服务器就出现无法读取文件的事情可以通过class反射的方法获取文件的系统路径,免得出现异常. 以下是一个测试的demo,通过注释的方式说明了一下问题与解决方案. p ...

  10. IO流--文件切割合并对象的序列化

    [阶段一目标:文件的分割]1,切割文件的原理:一个源对应多个目的:切割文件的两种方式.2,碎片文件的命名和编号.3,程序代码体现.4,如何记录源文件的类型以及碎片的个数(建立配置信息文件)(其实也可以 ...

最新文章

  1. 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest
  2. 德鲁克对管理的十大看法
  3. Metasploit命令info使用技巧
  4. 给html5标签设置手机号码格式化,meta标签name=format-detection属性写法及用法
  5. python php linux-Apache同时支持PHP和Python的配置方法
  6. 【s操作】巧用免费云笔记和免费网盘的完美配合
  7. java gui 控制台_在GUI面板中创建Java控制台
  8. eclipse找不到dynamic_Eclipse Juno在Dynamic Web Project中没有JSP(但其他...
  9. 【数组】—冒泡排序选择排序---【巷子】
  10. 诗与远方:无题(二十一)
  11. django language_「基于Python技术的智慧中医商业项目」Django问诊系统篇-1.系统配置...
  12. 为什么电脑安装不了python_windows电脑安装python教程
  13. FragmentActivity和Activity的区别
  14. redis的info
  15. ruhr启动mysql数据库_mysql报错:ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists...
  16. 【keil5】安装及注册
  17. Carmack平方根函数经典案例
  18. 2019年Q1北京市短租房分布及价钱概览
  19. Halcon 3D点云和深度图的相互转化
  20. Python获取指定时间范围内的工作日、假日日、法定节假日

热门文章

  1. 一文看懂中国的金融体系
  2. ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
  3. win10查看计算机系统版本,如何查看我的电脑是不是win10 1909版本?
  4. [转]用python来开发webgame服务端(3)
  5. 如何压缩PPT文档的大小
  6. AI和数学领域的咖啡甜心(一):DeepFace基础
  7. 混淆电路的优化:PP、Free XOR、GRR
  8. android switch背景图片,修改SwitchCompat的背景图片
  9. 在r中弄方差分析表_R语言——方差分析
  10. 砂.随笔.十七.谋定而后动