C++ C++;网络IO、文件处理和网络故障

C++ C++;网络IO、文件处理和网络故障,c++,windows,file-io,file-handling,writefile,C++,Windows,File Io,File Handling,Writefile,我想在网络中的另一台机器上创建一个新文件并写入它。 我使用CreateFile和WriteFileMSDN函数来创建和写入文件 这里的问题是在网络故障期间对网络磁盘的写入不一致 在长时间故障和启用本地缓存期间,句柄将无效,并返回错误代码error\u BAD\u NETPATH(53)。因此,关闭现有句柄并重新打开新句柄会导致缓存中的数据丢失 通过使用FILE\u FLAG\u NO\u BUFFERING和FILE\u FLAG\u WRITE\u to标志禁用本地缓存在此处不能使用,因为这会

我想在网络中的另一台机器上创建一个新文件并写入它。 我使用
CreateFile
WriteFile
MSDN函数来创建和写入文件

这里的问题是在网络故障期间对网络磁盘的写入不一致

在长时间故障和启用本地缓存期间,句柄将无效,并返回错误代码
error\u BAD\u NETPATH
(53)。因此,关闭现有句柄并重新打开新句柄会导致缓存中的数据丢失

通过使用
FILE\u FLAG\u NO\u BUFFERING
FILE\u FLAG\u WRITE\u to
标志禁用本地缓存在此处不能使用,因为这会减慢写入速度


进行网络文件写入的最佳方式是什么?或者这是一次网络故障,这必须是一个限制?

按照Marcelino的建议,即首先在本地写入文件。然后使用system()运行一个拷贝实用程序,该程序作为外部进程为您的平台(例如:xcopy或scp)工作。这种可靠复制的功能不应尝试复制。就用它吧。:)

一个简单的解决方案是从一开始就简单地重写文件,这在糟糕的网络上可能会很烦人,而且90%的大文件已经被传输。你能在目标机器上运行程序吗?我会把一个“服务器”代码放在接收器上,用简单的SOCKITiF,你遇到了很多网络故障,你可以考虑把你的写断成更小的块。如果写入失败,请重新打开句柄并继续从最后一个失败的块追加到文件。我不知道上下文,但以这种方式远程写入文件是不安全的。我建议您将整个文件写入本地计算机,然后将其复制到远程位置。另一种选择是在远程位置使用另一个程序,并通过TCP/IPI发送文件内容,如果
WriteFile
CreateFile
的远程使用不依赖于TCP/IP,则会让人惊讶。