使用write函数 第一次将数据直接写到文件尾部很耗时。
我写一个文件传输的工具,要实现断点续传,想将已传输的位置写到文件尾部,但第一次将已传输的位置写到文件尾部时很耗时,得好几分钟,请问有木有更好的方法,实现断点续传功能,或者什么方法使第一次写文件尾部的效率更高些.
我写一个文件传输的工具,要实现断点续传,想将已传输的位置写到文件尾部,但第一次将已传输的位置写到文件尾部时很耗时,得好几分钟,请问有木有更好的方法,实现断点续传功能,或者什么方法使第一次写文件尾部的效率更高些.
解决方案 »
- 求一个需要用到多线程并且需要处理同步问题的例子~~
- 如果在控制面板中添加自己程序的快捷方式?
- 多线程中三行没看懂的代码
- 一个非常简单的问题!!在线等!关于模板的!
- VC8中字符串数组转换为CString问题
- 如何将自己的程序加入到系统菜单里?(在线等)
- 播放视频抖动的问题,帮忙啊。。。
- ADO的简单问题之无效的表名
- 如果对数据库中某一表进行检索时由于该表内记录过多,检索速度过慢,这种问题该怎样解决呢?请高手过来展示一下?
- 高分求助window2000下的串口通讯模块!
- 用一个参数判断多个值是否有效具体是怎样做的
- webbrowser访问rar文件时怎么处理可以让他直接显示二进制乱码而不是下载?
如果用的CFile,可以直接用CFile::SetFileLength
seek到末尾,然后write不可以吗?然后flush关闭,长度自然就改变了
感觉这设计很有问题
断点续传,取文件部分原理
1.先得到文件大小、其他一些属性等,SetLength一次性申请空间
2.传输数据,获取到得数据格式包含该段数据在文件里的偏移、数据长度和数据内容等
3.seek(文件头,偏移值),write(数据,长度)
那是不可能的,你单摘出来试试,确保不是这地方造成的耗时,我可以保证它的执行时间在10ms左右,像你说的几分钟,你找其他地方的问题,SetLength和seek不会有问题
其中szPos表示已传完的位置
m_hFile.Seek(-8,CFile::end);
m_hFile.Write(szPos,8);这样写的啊,第一次写是很耗时,之后就快了,我在想第一次,它是不是会自动填充数据啊