繁体   English   中英

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

[英]how can my .NET app prevent other processes from writing to a file while my app reads it?

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

只有 Julia 进程会写入这个文件。
只有我的 .NET 应用程序读取过这个文件。

这是怎么做的?

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

所有现代文件系统都像数据库一样工作。 因此,他们有锁和交易。 NTFS 就是一个光辉的例子。

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

当然,现在问题变成了其他程序如何处理锁定文件的其他人。 从技术上讲,您应该像处理任何其他外生异常一样处理它,但我是第一个承认在某些情况下我可能跳过了该代码(如果需要,则重试)的人。 或多任务处理,用于优雅地处理长锁获取时间。

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

我认为在这种情况下的方法是让 .net 线程检测来自 Julia 的新文件的存在,然后立即将其移动到不同的独占路径,在那里读取和删除它。 Julia 应用程序仅每 5 秒写入一次文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM