如何复制已经打开的文件?

问题描述:

我有一个文件句柄,它被打开。如何复制已经打开的文件?

HANDLE h = ::CreateFile(...) 

我想复制此文件。怎么做?我愿做这样的事情:

CopyFile(h, "new_file.dat"); 

我知道有CopyFile(fileName, newFileName)功能,但似乎我将不得不使用这个调用此函数之前关闭我的把手。有没有另一种方法做副本?

+1

确保源文件已完全刷新到磁盘可能就足够了。然后使用你在'CreateFile'调用中使用的文件名。 – 2013-05-06 13:45:37

+2

如果您的CreateFile调用未以任何形式的共享打开,而您尚未与我们分享,则只会有问题。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx – 2013-05-06 13:46:59

+0

对!我没有共享启用,当我把FILE_SHARE_READ它的工作。谢谢。 – fen 2013-05-06 14:05:04

我猜你正在使用windows。问题在于,在打开文件的窗口中,默认情况下会阻止其他打开(复制也会打开文件)。据我所知CreateFile有一个标志,允许以共享模式打开文件。根据定义该标志应解决您的问题。