将文件保存到网络

时间:2009-05-21 17:42:41

标签: c++ windows file-io createfile writefile

我有一个大约7 MB的文件,可以在几秒钟内保存到我的本地共享。但是,将该文件保存到网络位置需要分钟。我想知道我能做些什么来加快这个速度。以下是我目前的选择:

  1. 将数据保存到本地计算机上的临时文件,然后将临时文件复制到网络路径。我可能会这样做,因为这是最容易也是最有利可图的。
  2. 使用SetFilePointerEx()SetEndOfFile() 。根据这个问题的答案,我认为这可能有用:Creating big file on Windows
  3. 缓冲区写入。我可以自己缓存写入数据并在缓冲区满时刷新,但这对于操作系统已经完成的缓存不会是多余的吗?
  4. #1似乎是最好的选择,但我想知道是否有人建议更好地加快保存到网络路径?

    编辑:网络位于千兆位局域网上,因此速度不应成为问题。将文件复制到网络路径大约需要1秒钟。我只是注意到我们在较小的数据块上调用WriteFile()然后我们可能应该这样做,所以优化更高级别的代码来编写更大的块可能会有所帮助,但速度差异仍然很大,所以它仍然是一个值得提问的问题。

3 个答案:

答案 0 :(得分:1)

您需要进行aovid读取 - 修改 - 写入操作。您通常希望写入至少4KB的块,可能更高的2的幂。原因是要追加一个字节,您通常需要读取文件的最后一个块,追加一个字节,然后写回新块。通过写入4KB块(仅),每次写入通常最终作为文件末尾的新块。

缓存应该对您有所帮助,但缓存并不完美。它可能有助于独占打开文件。如果您拒绝读取访问权限,操作系统可能会注意到刷新缓存对其他应用程序来说并不重要。

CopyFile可以很快,因为它可以完全相同。

答案 1 :(得分:1)

  

我想知道是否有人建议更好地加快网络路径的保存?

也许你需要一个更好的网络。 ISP经常提供快速下载但上传速度慢。使用FTP等协议传输7 MB需要多长时间?

答案 2 :(得分:0)

您是在慢速网络上运行吗?

我使用选项编号1并将文件保存到后台的网络共享