微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#中缓存FileInfo属性

如何解决在C#中缓存FileInfo属性

| 从MSDN文档中的“ 0”属性,我看到该属性的数据是在第一次调用时被缓存的,并且随后只会使用“ 1”方法进行更新。 我有以下在文档中找不到或不太清楚的问题: 所有属性的数据是否同时缓存? 是在创建
FileInfo
时才调用
Refresh
方法,还是仅在首次调用属性时才调用
Refresh
方法? 如果我叫过一个物业,例如
Name
属性(称为
Refresh
)将调用其他属性,例如
DirectoryName
属性,第一次使它再次调用
Refresh
,还是仅由整个类中访问的第一个属性调用(请参阅问题1)? 我可以通过手动调用ѭ1来预缓存所有属性吗? (假设它没有在构造对象时预先缓存) 手动调用ѭ1是否会导致属性被预先缓存,例如
CreationTime
,还需要刷新吗?     

解决方法

         猜测是的。
FileInfo
只获取您之前获取的属性似乎有点不自在的“优化”,尤其是当它们可以(并且很可能)在一个API调用中全部获取时。 该文档指出了服务已缓存的
FileInfo
DirectoryInfo
方法这一事实非常强烈地(无论如何对我而言)表明,仅构造
FileInfo
不会缓存任何内容。这是有道理的-如果直接构造一个,3,它可能会引用一个尚不存在的文件(例如,您打算创建该文件),而所有返回已缓存ѭ3的方法都引用了该文件。假设您至少要使用其中一些快照时间。 不,根据我对问题1的回答。这就是为什么使用Refresh方法的原因。 我会这样想(请参阅答案1)。 是。参见答案3。     ,           如果当前是当前值,则将预先缓存CreationTime属性的值   FileSystemInfo对象的实例是从任何   以下DirectoryInfo方法:         获取目录   获取文件   GetFileSystemInfos   枚举目录   枚举文件   枚举文件系统信息         要获取最新值,请调用Refresh方法。      如果FileSystemInfo对象中描述的文件不存在,   此属性将在公元1601年1月1日午夜12:00返回   协调世界时(UTC),调整为本地时间。      NTFS格式的驱动器可能会缓存文件元信息,例如文件创建   时间,短时间。此过程称为文件   隧道。因此,可能有必要明确设置   如果您要覆盖或替换文件的文件创建时间   现有文件。 (MSDN) 在内部,ѭ1调用标准Win32API,从而填充所有属性。
[...]
flag2 = Win32Native.GetFileAttributesEx(path,ref data);
访问指定为“刷新”的任何属性都会导致完全刷新,例如:
public DateTime LastAccessTimeUtc
{
    [SecuritySafeCritical]
    get
    {
        if (this._dataInitialised == -1)
        {
            this._data = default(Win32Native.WIN32_FILE_ATTRIBUTE_DATA);
            this.Refresh();
        }
        [...]
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。