通过ActiveSync执行的文件系统操作(例如复制,删除,移动) - 它们是原子的吗?

时间:2012-03-06 11:28:07

标签: file-io filesystems windows-ce atomicity .net-cf-3.5

我正在为.NET CE 6开发.NET Compact Framework 3.5中的应用程序。我需要在移动应用程序和PC之间自动执行一些数据同步。所以我所做的是,在.NETCF应用程序中,我有一个while循环,每隔几秒检查一次,使用System.IO.File.Exists(fullFilePath),无论我期望的文件是否已从PC复制到移动设备,通过ActiveSync连接。

移动应用程序找到该文件后,将打开并使用StreamReader读取它。

我的问题是,有时,File.Exists(fullFilePath)会返回true,但后续使用StreamReader可能会因FileNotFoundException而失败。

排除在File.Exists()调用和StreamReader实例化之间删除文件的可能性,是否有人知道异常可能如何发生?是因为通过ActiveSync的文件副本不是原子的,这样即使File.Exists()返回true,该文件实际上还没有准备好读取吗?

1 个答案:

答案 0 :(得分:1)

文件副本肯定是而不是是原子的。启动副本时,将创建该文件,但该文件中没有数据。在写入文件数据时,文件“存在”,但尚未完全完成。你不仅想知道它是否存在,而且它目前还没有被使用(意味着作者已经完成)。试图独占打开它会验证。