使用write函数 第一次将数据直接写到文件尾部很耗时。
我写一个文件传输的工具,要实现断点续传,想将已传输的位置写到文件尾部,但第一次将已传输的位置写到文件尾部时很耗时,得好几分钟,请问有木有更好的方法,实现断点续传功能,或者什么方法使第一次写文件尾部的效率更高些.

解决方案 »

  1.   

    你不会是一直写到文件尾的吧?假如你要创建一个100MB的空文件,那你就seek到100*1024*1024-1的位置,然后写一个字节就创建了一个100MB的空文件,速度也就是写入1个字节的速度,瞬间的事,你不会是真的写入100MB的空数据吧?
    如果用的CFile,可以直接用CFile::SetFileLength
      

  2.   

    我是使用的CFile::SetLength 然后 seek到文件尾部,再写数据的,但还是很耗时
      

  3.   

    为什么要 setlength
    seek到末尾,然后write不可以吗?然后flush关闭,长度自然就改变了
      

  4.   


    感觉这设计很有问题
    断点续传,取文件部分原理
    1.先得到文件大小、其他一些属性等,SetLength一次性申请空间
    2.传输数据,获取到得数据格式包含该段数据在文件里的偏移、数据长度和数据内容等
    3.seek(文件头,偏移值),write(数据,长度)
      

  5.   

    直接CFile::SeekToEnd()就可以将文件指针移动到末尾了
      

  6.   


    那是不可能的,你单摘出来试试,确保不是这地方造成的耗时,我可以保证它的执行时间在10ms左右,像你说的几分钟,你找其他地方的问题,SetLength和seek不会有问题
      

  7.   

    m_hFile.SetLength(m_nFileLengthByte + 8);//文件最后8字节记下已写的位置
    其中szPos表示已传完的位置
    m_hFile.Seek(-8,CFile::end);
    m_hFile.Write(szPos,8);这样写的啊,第一次写是很耗时,之后就快了,我在想第一次,它是不是会自动填充数据啊