.NET应用程序如何在我的应用程序读取文件时阻止其他进程将其写入文件?

时间:2019-01-11 15:47:33

标签: c# .net julia

我希望我的.NET应用程序读取由Julia应用程序写入的文件。读取文件时,我希望我的应用程序以某种方式锁定文件,以使.NET读取文件时Julia进程无法将其写入。

只有Julia进程会写入此文件。
只有我的.NET应用程序才能读取此文件。

这是怎么做的?

我想使用:
System.IO.File.Copy(source_filename,destin_filename)

2 个答案:

答案 0 :(得分:1)

所有现代文件系统都像数据库一样工作。因此,它们具有锁定和事务处理。 NTFS是一个很好的例子。

除了读取锁(或只是ReadWrite锁)之外,您还希望获取文件的写入锁。然后只使用读取的一个。 可以有多个读锁,但是任何给定文件上只有一个写锁。在某些情况下,拥有写锁定的任何人甚至都可以排除获得读锁定的其他人(反之亦然)-避免在读取过程中出现文件不一致是必要的。但这涉及到深入的实现细节。

当然,现在的问题是 other 程序将如何处理锁定该文件的其他人。从技术上讲,您应该像处理其他Exogenous exception一样处理该问题,但是我第一个承认在某些情况下我可能会跳过该代码(如果需要,请重试该代码)。或通过多任务处理来充分处理较长的锁定获取时间。

在任何一种情况下,最好尽快释放您的锁。为此,建议将整个文件快速读取到内存中,然后再处理内存副本。在.NET中如何解决这个问题在很大程度上取决于文件大小。 x32内存限制和对象限制因妨碍GiB范围内的文件而臭名昭著。

答案 1 :(得分:0)

我认为在这种情况下,最好的方法是拥有一个.net线程,该线程可以检测到来自Julia的新文件,然后将其立即移动到另一个专有路径中,在该路径中进行读取和删除。 Julia应用程序仅每5秒钟写入一次文件。