gpt4 book ai didi

c# - 在当前正在写入的文件上创建 FileInfo 是否安全?

转载 作者:太空狗 更新时间:2023-10-29 18:20:24 24 4
gpt4 key购买 nike

在我的应用程序(C# 4.5 winforms 应用程序)中,我定期检查文件夹的内容并将找到的任何文件的详细信息存储到数据库中。在此例程中,我使用 new FileInfo(path) 创建了一个 FileInfo 实例,并读取属性 CreationTimeLastWriteTimeLastAccessTimeLengthAttributes。我从不在 FileInfo 实例上调用任何方法。

我想知道的是:如果在我创建时文件当前正在被第三方应用程序写入(或正在被 Windows 复制到文件夹的过程中),是否存在损坏、锁定或运行时错误的风险FileInfo 对象或访问它的属性?

最佳答案

是的,这是“安全的”。这是在非常低的级别处理的,即文件系统驱动程序。常见文件系统(如 FAT 或 NTFS)上的文件在磁盘上有两种不同的结构。首先是目录条目,它存储有关文件的元数据。比如名称、时间戳、属性和长度。实际的文件数据存储在别处,即存储文件数据的簇链。

FileInfo 专门为您提供文件的元数据。文件数据更加敏感,在进程写入文件时很容易发生变化。值得注意的是,您可以使用 FileShare 选项锁定对文件数据的访问。但是没有办法锁定元数据。因此,您始终可以获得文件的 FileInfo,而不管另一个进程正在对该文件执行什么操作。

当然,当进程写入文件时,实际的 FileInfo 属性可能会发生变化。它们延迟更新,尤其是 LastAccessTime 属性。如果您想确保获得无法更改的准确信息,则需要锁定该文件。为此,请使用 FileShare.Read 或 FileShare.None 打开文件。只要您打开了文件,就可以确保没有其他进程可以打开文件进行写入。请注意, 很容易抛出 IOException,只有当没有其他进程在您之前打开文件进行写入时,您才会获得锁定。

关于c# - 在当前正在写入的文件上创建 FileInfo 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com