今天翻到一个早期写测试代码的目录,找到几个以前的测试代码,于是拿出来贴到博客中。(只是简单的测试,并不严谨。注意这里windows和linux的硬件环境不一样)

这一个是使用fstream进行文件拷贝的代码,测试机器的环境大概如下(时间久了,机器有更新)

CPU: i7 低压版
硬盘:两个60G的SSD,好像是建兴的
内存:8G DDR3

当时仅在Arch Linux上做了测试,今天顺便在windows下做一个测试。
CentOS7_gcc4.9.4.ova其实是虚拟机的镜像文件,1.8G大小。

代码如下:

#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>bool copy_file(const char* src_file_path,const char* dst_file_path)
{// 检测目标文件是否存在{std::ifstream exsit(dst_file_path);if(exsit){std::cout<<"目标文件 "<< dst_file_path<< " 已经存在"<<std::endl;return false;}}std::ifstream fin(src_file_path,std::ios::binary);std::ofstream fout(dst_file_path,std::ios::binary);if(!fin || !fout){std::cout<<"打开源文件或目标文件失败"<<std::endl;return false;}// rdbuf返回streambuf*// 速度比迭代器拷贝快太多// Linux下测试结果// time ./fstream_copy_file.exe CentOS7_gcc4.9.4.ova /mnt/data/CentOS7_gcc4.9.4.ova//  0.23s user 8.15s system 10% cpu 1:16.98 totalfout << fin.rdbuf();return true;/*使用迭代器进行拷贝没有大问题,但是效率不高// time ./fstream_copy_file.exe CentOS7_gcc4.9.4.ova /mnt/data/CentOS7_gcc4.9.4.ova407.45s user 4.37s system 97% cpu 7:00.73 totalfin.unsetf(std::ios::skipws);   //输入流默认跳过空白字符,取消此设置// 使用迭代器进行拷贝std::copy(std::istream_iterator<char>(fin),std::istream_iterator<char>(),std::ostream_iterator<char>(fout,""));return true;*/
}int main(int c,char** v)
{if(c != 3){printf("Usage:%s srcfile dstfile\n",v[0]);return 0;}copy_file(v[1],v[2]);return 0;
}

测试结果如下:
Windows 10
Windows下使用VS2015编译,64位版本(time命令来自git-bash)
Windows下硬盘是两个机械硬盘之间拷贝(1T 7200转希捷)

# 使用rdbuf拷贝,速度大概50M每秒
$ time ./fstrean_copy_file.exe /g/CentOS7_gcc4.9.4.ova /d/CentOS7_gcc4.9.4.ovareal    0m36.357s
user    0m0.000s
sys     0m0.015s# 使用std::copy拷贝,速度大概6M每秒
$ time ./fstrean_copy_file.exe /g/CentOS7_gcc4.9.4.ova /d/CentOS7_gcc4.9.4.ovareal    5m3.663s
user    0m0.000s
sys     0m0.015s

转载于:https://www.cnblogs.com/oloroso/p/8979507.html

利用fstream进行文件拷贝测试相关推荐

  1. linux c mmap 写文件夹,利用mmap实现文件拷贝功能

    利用mmap实现的一个文件拷贝例子,供大家参考,具体内容如下 /* * gcc -Wall -O3 -o copy_mmap copy_mmap.c */ #include < stdio.h ...

  2. python 利用多进程实现文件的拷贝

    python 利用多进程实现文件的拷贝 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37338590/article/details/784 ...

  3. 文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

     1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; ...

  4. 使用putty在linux主机和windows主机之间拷贝文件(已测试可执行)

    转载于,请点击 首先下载putty,putty下载地址zip, 解压zip发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttyt ...

  5. 89.网络安全渗透测试—[常规漏洞挖掘与利用篇5]—[文件包含漏洞详解实战示例]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.文件包含漏洞详解 1.文件包含漏洞相关概念 2.PHP文件包含漏洞相关概念 3.PHP文件包含漏洞利用:`构 ...

  6. java 字节批量拷贝_Java基础回顾 : 利用字节流实现文件的拷贝

    本文是一个范例 : 利用字节流实现文件的拷贝 package example; /** * 文件的拷贝. */ import java.io.File; import java.io.FileInpu ...

  7. 用java在d盘创建test文件_在D盘中创建文件test.txt,文件中内容为:hello Java,然后利用流把该文件拷贝到E盘根目录中...

    // 在D盘中创建文件test.txt,文件中的内容为:"hello Java" File file = new File("D:/test.txt"); St ...

  8. 你知道Java文件拷贝有几种方式么?

    作者:不清不慎,目前在杭州蘑菇街公司任职,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人! java中的文件拷贝主要有三种方式来实现. 一.使用输入输出流 可以使用java.io包 ...

  9. Java实现文件拷贝

    经过一组简单的测试发现JAVA NIO提供的文件内存映射方法实现文件拷贝速度最快,不管是大文件还是小文件,特别是大文件的拷贝速度比普通方法提高20倍,唯一有个前提就是内存需要足够大,否则文件映射肯定失 ...

最新文章

  1. 一定是你想要的微服务资源springboot、springcloud、docker、dubbo
  2. 在做研究的时候很重要的事情
  3. #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)
  4. Java制作VCARD
  5. python tkinter Listbox用法
  6. python complex函数def_【Python3】Python函数
  7. 在Saas发展的黄金时代里带你理解SaaS设计
  8. vb 解析ini文件_PHP文件及运行(适合PHP初学者)
  9. 区域医疗移动医疗影像解决方案1-基于HTML5的PACS
  10. 全球最大的同性交友网站,竟然还有这些骚操作
  11. 开关电源(DC/DC)和线性电源(LDO低压差线性稳压器)的区别
  12. 大学生河南旅游网页设计成品 学生网页作业我的家乡网页制作代码 静态HTML旅游网页设计作品下载
  13. tbschedule源码学习
  14. iOS股票K线图、分时图绘制
  15. 【Tools】HP/惠普v285w 量产工具
  16. python sample函数
  17. Python 设计模式 - 建造者模式
  18. Linux 与 Python编程2021 经典函数实例 educoder实训
  19. servlet的异步和非阻塞原理
  20. Docker Volume原理及使用

热门文章

  1. [发布]Quartz.NET 示例程序:企业调度器 V0.2 源代码
  2. Linux后台进程管理以及ctrl+z(挂起)、ctrl+c(中断)、ctrl+\(退出)和ctrl+d(EOF)的区别
  3. 一文读懂P Quant与 Q Quant ,量化交易与金融工程
  4. matlab verilog 接口,使用SystemVerilog简化FPGA中的接口
  5. 数据集合 oracle,oracle集合
  6. RabbitMQ 高可用之如何确保消息成功消费
  7. 033_NavMenu导航菜单
  8. dir在python中什么意思_python中dir是什么
  9. vertrigoserv mysql 密码_VertrigoServ
  10. c++实现sscom串口助手循环发送_串口通讯你真的会了吗?不妨看看这些经验