我正在尝试调试我不熟悉的应用程序。
在代码的某处,我看到了这个:
File.GetAttributes(FileName) _
.Equals(FileAttributes.Archive | FileAttributes.ReadOnly)
FileAttributes.Archive | FileAttributes.ReadOnly
(使用单个管道)测试究竟是什么?我猜是看文件是归档的还是只读的,但是文件是归档的,测试返回false。
谢谢
FileAttributes.Archive | FileAttributes.ReadOnly
意味着组合(按位或)两个值。调用Equal()
意味着比较是否相等。因此,true
当且仅当文件同时设置了存档位和只读位时,它才会产生。
该代码完全是错误的。写它的人搞砸了,直到他们得到它的工作。FileAttributes 是具有 [Flags] 属性的 Enum 类型。这意味着可以设置任何标志组合。这就是 OR 运算符的作用,它结合了 Archive 和 ReadOnly 属性。
这是偶然的,一个文件通常打开了存档属性。一旦用户备份文件,代码就会惨遭失败。这会关闭 Archive 属性,并且 Equals() 方法不再起作用,即使文件仍然是只读的。
您必须修复此错误。让它看起来像这样:
If (File.GetAttributes(FileName) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then
'' It is read-only
''...
End If
File.GetAttributes(FileName) _
.Equals(FileAttributes.Archive | FileAttributes.ReadOnly)
只有在以下情况下才会返回 true:
和
乍一看,这似乎不是一个非常有用的测试 - 为什么要排除压缩文件?