文件的copy(一次性完成数据的传递 )
来源:互联网 发布:2017淘宝爆款打造方法 编辑:程序博客网 时间:2024/06/14 06:07
学习文件位置定位函数接口,完成对文件内容的任意位置的访问
#include <stdio.h>
#include <stdlib.h>#include <string.h>
int main(int agrc,char **argv)
{
//新的需求:
//一次性完成数据的传递
//一次性读取源文件
//一次性写入到源文件
int ret=-1;
//总体的需求:拷贝 源文件(source.c)到目标文件(dst.c
//第一步:打开source.c文件
FILE *fp_s=NULL;//源文件流
fp_s=fopen("source.c","r");//只读该文件 r
if(NULL==fp_s)
{
perror("fopen source.c");
return -1;
}
//第二步:打开目的文件
FILE *fp_d=NULL;//目标文件流
fp_d=fopen("dst.c","w");
if(fp_d==NULL)
{
perror("fopen dst.c");
return -1;
}
//第三步:准备内存
char *buff=NULL;
//计算出源文件的大小
//将光标设置到数据的尾部,计算到光标到文件首部的字节数、
//计算出文件的大小
ret=fseek(fp_s,0,SEEK_END);
if(-1==ret)
{
perror("fseek");
return -1;
}
long file_size;
file_size=ftell(fp_s);
//在获取文件的大小后,别忘了,将光标移动到文件的首部。
//文件位置---文件头
ret=fseek(fp_s,0,SEEK_SET);
if(-1==ret)
{
perror("fseek");
return -1;
}
//在这里我们分配的内存就是ret,而不是20个
buff=malloc(file_size);//堆
if(NULL==buff)
{
perror("malloc buff");
return -1;
}
memset(buff,'\0',file_size);//内存每一次完成后清零
//第四步:读、写
//文件,内存地址,读多少内容
//给读函数提供的信息:读的文件的名称,读到那去,读多少,从哪里开始读。
//从源文件的默认光标(文件位置处)
//存放到用户内存里面
ret= fread(buff,1,file_size,fp_s);
//ret的值有三种情况:ret>20,ret<20,ret=0
if(20>ret)
{
//读到source.c文件的尾部
if(feof(fp_s))
{
ret=fwrite(buff,1,ret,fp_d);
if(0==ret)
{
perror("fwrite");
return -1;
}
}
else
{
perror("fseek");
return -1;
}
long file_size;
file_size=ftell(fp_s);
//在获取文件的大小后,别忘了,将光标移动到文件的首部。
//文件位置---文件头
ret=fseek(fp_s,0,SEEK_SET);
if(-1==ret)
{
perror("fseek");
return -1;
}
//在这里我们分配的内存就是ret,而不是20个
buff=malloc(file_size);//堆
if(NULL==buff)
{
perror("malloc buff");
return -1;
}
memset(buff,'\0',file_size);//内存每一次完成后清零
//第四步:读、写
//文件,内存地址,读多少内容
//给读函数提供的信息:读的文件的名称,读到那去,读多少,从哪里开始读。
//从源文件的默认光标(文件位置处)
//存放到用户内存里面
ret= fread(buff,1,file_size,fp_s);
//ret的值有三种情况:ret>20,ret<20,ret=0
if(20>ret)
{
//读到source.c文件的尾部
if(feof(fp_s))
{
ret=fwrite(buff,1,ret,fp_d);
if(0==ret)
{
perror("fwrite");
return -1;
}
}
else
{
//出错
perror("fread");
return -1;
}
}
//写
ret=fwrite(buff,1,ret,fp_d);
if(0==ret)
{
perror("fwrite");
return -1;
}
free(buff);
buff=NULL;
fclose(fp_d);
fp_d=NULL;
fclose(fp_s);
fp_s=NULL;
return 1;
}
哪个错误:没有循环的结构中使用了break
0 0
- 文件的copy(一次性完成数据的传递 )
- 【IO流】FileReader,FileWriter完成文件的copy
- extjs 一次性用一个参数传递多个数据的做法和美化等待信息
- ftp数据采集的代码(一次性数据采集)
- 通过 session 完成 action 之间的数据传递
- 无法一次性删除所有数据的解决方案
- 一次性读取数据的分页控件
- 一次性插入上万条数据的sql
- 一次性把新增的文件 svn add
- IRP的传递与完成
- Irp的传递与完成
- Copy文件的顺序
- Copy文件的方法
- 超大文件的copy
- python_文件的copy
- 关于java的引用传递(copy百度问答)
- 使用库函数完成文件copy
- Python的对象传递与Copy函数
- win7远程桌面连接 Ubuntu 14.04
- #BestCoder Round #59 (div.2)
- singleton instance 实现
- Python的type 还是要靠isinstance判断类型
- 总结心灵鸡汤
- 文件的copy(一次性完成数据的传递 )
- jquery特效之可编辑的表格
- 五种常用的图片格式及其是否有数据压缩的总结
- Android UI 设计:ListView控件和ArrayAdapter适配器(二)
- Android开发菜鸟级入门5--网络编程之套接字TCP
- 谷歌C++编程规范笔记
- 韩顺平 java 第39讲 线程
- iOS的UINavigationController简单使用入门(状态:已完成)
- 最长公共子序列(Longest Common Subsequence,LCS)