如何复制已经打开的文件?
问题描述:
我有一个文件句柄,它被打开。如何复制已经打开的文件?
HANDLE h = ::CreateFile(...)
我想复制此文件。怎么做?我愿做这样的事情:
CopyFile(h, "new_file.dat");
我知道有CopyFile(fileName, newFileName)
功能,但似乎我将不得不使用这个调用此函数之前关闭我的把手。有没有另一种方法做副本?
答
我猜你正在使用windows。问题在于,在打开文件的窗口中,默认情况下会阻止其他打开(复制也会打开文件)。据我所知CreateFile有一个标志,允许以共享模式打开文件。根据定义该标志应解决您的问题。
确保源文件已完全刷新到磁盘可能就足够了。然后使用你在'CreateFile'调用中使用的文件名。 – 2013-05-06 13:45:37
如果您的CreateFile调用未以任何形式的共享打开,而您尚未与我们分享,则只会有问题。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx – 2013-05-06 13:46:59
对!我没有共享启用,当我把FILE_SHARE_READ它的工作。谢谢。 – fen 2013-05-06 14:05:04