Linux中进行单文件内容的复制
文件内容复制的常规方法:
- 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长
- 一次性复制文件的内容,这种方法必须首先获取当前被复制的文件内容的大小,然后一次性开辟与文件内容大小相同的内存空间,通常为了安全,都必须让大小加1。
读取文件内容的步骤
- 打开被复制文件(open/fopen)
- 读取文件内容(read/fread)--->当使用系统IO(open这一类)的时候可以直接读取内容,但当使用标准IO(fopen这一类)的时候,必须进行下一步
- 标准IO读取文件内容的时候,必须先获取到文件内容的大小,通常使用fseek和ftell来获取,系统IO则不用
- 写入另一份文件中进行保存(write/fwrite)
- 关闭打开的文件
具体的操作(考虑到移植性,本文章使用标准IO进行操作)
- 使用fopen打开被复制的文件和创建一个保存的文件,并判断是否打开或创建成功
- 使用fseek和ftell来获取当前复制文件的内容大小fileSize;
- 开辟一个内存空间,建议使用动态开辟的方法,比如mallco,calloc,new等
- 使用fread读取被复制文件的内容,使用fwrite写进到保存文件中
- 使用fclose关闭上述的两个文件
代码显示
#include <stdio.h> int main(int argc,char *argv)
{
//以只读的方式打开被复制的文件
FILE *srcFd = fopen("./source.txt","r");
if(NULL == srcFd)
{
printf("open source file failed\n");
return -;
} //以读写的方式创建一个不存在的文件
FILE *dstFd = fopen("./save.txt","w+");
if(NULL == dstFd)
{
printf("open save file failed\n");
return -;
} //进行获取文件大小的操作
fseek(srcFd,,SEEK_END); //将光标移动到文件末尾
long fileSize = ftell(srcFd); //获取文件的大小
fseek(srcFd,,SEEK_SET); //将光标恢复到文件的开头 //开辟一个新空间(动态开辟)
char *dataBuf = (char *)calloc(,fileSize+);
if(NULL == dataBuf)
{
printf("calloc a memory failed\n");
return -;
} //读取文件的内容
long retSize = fread(dataBuf,,fileSize,srcFd);
if(retSize != fileSize)
{
printf("read file context failed\n");
return -;
} //写入保存文件中
retSize = fwrite(dataBuf,,fileSize,dstFd);
if(retSize != fileSize)
{
printf("write context in file failed\n");
return -;
} //关闭文件和释放内存空间
fclose(srcFd);
fclose(dstFd); free(dataBuf); return ;
}
Linux中进行单文件内容的复制的更多相关文章
- linux中快速清空文件内容的几种方法
这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...
- Linux中查看日志文件的正确姿势,求你别tail走天下了!
作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了.尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi( ...
- Linux中环境变量文件及配置
Linux中环境变量文件及配置 一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...
- reinstall_xbt: Linux中如何查看文件的最初创建时间
Linux中如何查看文件的最初创建时间 与文件相关的几个时间: 1.访问时间,读一次这个文件的内容,这个时间就会更新.比如对这个文件使用more命令.ls.stat命令都不会修改文件的访问时间. ...
- Linux中/etc/passwd文件与/etc/shadow文件解析.
此文章转载自"慧可",用来学习. 1. /etc/passwd文件 1.1 /etc/passwd文件内容格式 用户名: 密码 : uid : gid :用户描述:主目录:登陆s ...
- Linux中如何查看文件夹的大小
直接查看当前文件夹的大小: du –sh 只看文件夹的名字里包含某字符串的子文件夹的大小: du –h –d 1 | grep "BACKEND" 我的linux系统被阉割的比较厉 ...
- 如何在 Linux 中挂载 ISO 文件
在 Windows 中,我们常常使用 Daemon Tools 和 Virtual CloneDrive 等虚拟光驱软件挂载光盘镜像,下面我们一起来学习在 Linux 中如何挂载 ISO 文件. 在 ...
- Linux 中挂载 ISO 文件
在 Linux 中挂载 ISO 文件 用 mount 命令,在终端中输入如下命令即可: sudo mount -o loop filename.iso /cdrom 其中 filename.iso 是 ...
- linux中导入sql文件
在linux中导入sql文件的方法分享(使用命令行转移mysql数据库) 因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql ...
随机推荐
- ExtJS 4.2 评分组件
上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...
- sonn_game网站开发01:写在最前面
之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...
- spring源码分析之freemarker整合
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程 ...
- 微信小程序(微信应用号)组件讲解
这篇文章主要讲解微信小程序的组件. 首先,讲解新建项目.现在有句话:招聘三天以上微信小程序开发,这个估计只能去挖微信的工程师了.技术新,既然讲解,那我们就从开始建项目讲解. 打开微信web开发者工具, ...
- c# 基础 object ,new操作符,类型转换
参考页面: http://www.yuanjiaocheng.net/webapi/config-webapi.html http://www.yuanjiaocheng.net/webapi/web ...
- Unable to create the selected property page. An error occurred while automatically activating bundle net.sourceforge.pmd
解决方案: 在命令行到eclipse目录下使用 eclipse.exe -clean
- BridgePattern(桥接模式)
/** * 桥接模式 * @author TMAC-J * 应用于多维度方案 * 用组合的形式代替继承 * 符合单一职责原则 * 一个类只有一个引起他变化的原因 * 增加程序灵活性 */ public ...
- 安卓GreenDao框架一些进阶用法整理
大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession. ...
- Atitit 解决Unhandled event loop exception错误的办法
Atitit 解决Unhandled event loop exception错误的办法 查看workspace/.metadata/.log org.eclipse.swt.SWTError: No ...
- Linux设备管理(四)_从sysfs回到ktype
sysfs是一个基于ramfs的文件系统,在2.6内核开始引入,用来导出内核对象(kernel object)的数据.属性到用户空间.与同样用于查看内核数据的proc不同,sysfs只关心具有层次结构 ...