ios助手开发系列(六):文件操作系列3 - 文件上传和文件下载
来源:互联网 发布:二建题库软件 编辑:程序博客网 时间:2024/05/10 11:58
这一章算是一个重要内容了,涉及到实际功能了
文件的上传和下载:上传就是指将本地的文件上传到苹果设备上的文件系统中,下载则相反。
首先需要注意的地方:
本地的路径形式,如:"D:\\testFolder\\my.txt"
设备的路径形式,如:"/Books/test.pdf"
不多说,先直接上代码:
文件上传:
#define SECTIONSIZE (1024*512)
BOOL IOSFileUpload(HANDLE afcHandle,char* fromPath,char* toPath){FILE *file = fopen(fromPath, "rb");long filesize = 0;fseek(file,0,SEEK_END);filesize = ftell(file);long partCount = 0;long leftSize = filesize % SECTIONSIZE;partCount = filesize / SECTIONSIZE;partCount += leftSize>0?1:0;ULONGLONG fileHandle;UINT ret = 0;ret = iTunesApi::AFCFileRefOpen(afcHandle,toPath,AFC_FOPEN_WRONLY,0,&fileHandle);long pos = 0;fseek(file,pos,SEEK_SET);//if(partCount>1){do{char* buf = new char[SECTIONSIZE];fread(buf, 1,SECTIONSIZE, file );pos+= SECTIONSIZE;fseek(file,pos,SEEK_SET);ret = iTunesApi::AFCFileRefWrite(afcHandle,fileHandle,buf,SECTIONSIZE);delete buf;}while((filesize/(pos+SECTIONSIZE))>0);}if (leftSize>0){char* buf = new char[leftSize];fread(buf, 1,leftSize, file);pos+= leftSize;fseek(file,pos,SEEK_SET);ret = iTunesApi::AFCFileRefWrite(afcHandle,fileHandle,buf,leftSize);delete buf;}//ret = iTunesApi::AFCFileRefClose(afcHandle,fileHandle);return TRUE;}
解释:
本来代码可以很短,但你上传一个文件,总不至于一下子就上传上去吧?一般会分块
SECTIONSIZE就是每块的大小,可以自行设定
需要用到的API函数:
AFCFileRefOpen 打开设备文件句柄
AFCFileRefWrite 往打开的文件里面写内容
AFCFileRefClose 关闭文件句柄
其中afcHandle就是上一章中讲到的AFC服务句柄,在做上传操作之前需要开启此服务
有兴趣的朋友可以在里面加一些参数什么的,可以做有进度的文件上传,当然我这里已经做好了,只是避免代码太长,所以删减了。。。
文件下载:
BOOL IOSFileDownload(HANDLE afcHandle,char* fromPath,char* toPath){ULONGLONG fileHandle;UINT ret = 0;long filesize = 0;IOSFileInfo fileinfo;long pos = 0;long partCount = 0;long leftSize = 0;UINT buflen = 0;partCount = filesize / SECTIONSIZE;partCount += leftSize>0?1:0;HANDLE tmpHandle;ret = iTunesApi::AFCDirectoryOpen(afcHandle,fromPath,&tmpHandle);//0表示是文件夹,其它均表示非文件夹if (ret){IOSGetPathInformation(afcHandle,fromPath,&fileinfo);filesize = fileinfo.filesize;leftSize = filesize % SECTIONSIZE;partCount = filesize / SECTIONSIZE;partCount += leftSize>0?1:0;ret = iTunesApi::AFCFileRefOpen(afcHandle,fromPath,AFC_FOPEN_RDONLY,0,&fileHandle);//0 successFILE* file = fopen(toPath,"rb");if (file){fclose(file);remove(toPath);}file = fopen(toPath,"wb");if (!file){return FALSE;}fseek(file,0,SEEK_SET);if(partCount>1){do{buflen = SECTIONSIZE;char* buf = new char[SECTIONSIZE];ret = iTunesApi::AFCFileRefRead(afcHandle,fileHandle,buf,&buflen);fwrite(buf,SECTIONSIZE,1,file);pos+= SECTIONSIZE;delete buf;}while((filesize/(pos+SECTIONSIZE))>0);}if (leftSize>0){buflen = leftSize;char* buf = new char[leftSize];ret = iTunesApi::AFCFileRefRead(afcHandle,fileHandle,buf,&buflen);fwrite(buf,leftSize,1,file);pos+= SECTIONSIZE;delete buf;}ret = iTunesApi::AFCFileRefClose(afcHandle,fileHandle);fclose(file);}return TRUE;
解释:
IOSGetPathInformation函数是我自定义的一个函数,是获取一个设备上文件的信息的函数,这里主要是为了获取设备上文件的长度,具体可参照文件系列的第一章;
需要用到的API函数:
AFCDirectoryOpen 判断是否为文件夹
AFCFileRefOpen 打开设备上的文件
AFCFileRefRead 读取内容
AFCFileRefClose 关闭文件
同样是分块读取的
大家如果有什么不懂的,可以留言!
- ios助手开发系列(六):文件操作系列3 - 文件上传和文件下载
- J2EE系列之Struts2学习笔记(二十二)--Struts2多文件上传和文件下载
- 文件上传和文件下载
- ios助手开发系列(四):文件操作系列1 - 获取设备文件信息 AFCFileInfoOpen函数和AFCKeyValueRead函数
- JNI开发基础系列--文件切割和文件合并
- python ftp 文件上传和文件下载
- Struts2中的文件上传和文件下载
- NSURLSession实现文件下载和文件上传
- struts2的文件上传和文件下载
- struts2文件下载和文件上传
- springmvc文件上传和文件下载
- 文件上传和文件压缩下载
- HTML5 多文件上传和文件操作
- ios助手开发系列(五):文件操作系列2 - 操作文件和文件夹所需要开启的服务:AFC服务和AFC2服务
- 简单的Ext文件上传,文件下载和文件删除
- 文件上传allowedTypes和文件下载contentType(mimeType)
- 文件上传allowedTypes和文件下载contentType(mimeType)
- 利用Socket 实现 FTP 文件上传和文件下载
- LWIP之TCP层发送相关
- Android 设置铃声分析
- HttpServlet分析
- 【Unity开发】Unity3d中定时器使用
- SurfaceFlinger启动过程分析
- ios助手开发系列(六):文件操作系列3 - 文件上传和文件下载
- Jquery中dialog属性小记
- LWIP之TCP层接收相关
- mini2440 usb device controller 驱动的分析--gadget设备(三)--- usb device framework
- delphi 软件自动获取管理员权限方法
- 配置华为交换机远程telnet登陆
- iOS程序打包流程图
- LEFT JOIN ,RIGHT JOIN 和INNER JOIN 的区分
- 使用Sql 语句产生序列号