0

我正在尝试调试我不熟悉的应用程序。

在代码的某处,我看到了这个:

File.GetAttributes(FileName) _
    .Equals(FileAttributes.Archive | FileAttributes.ReadOnly)

FileAttributes.Archive | FileAttributes.ReadOnly(使用单个管道)测试究竟是什么?我猜是看文件是归档的还是只读的,但是文件是归档的,测试返回false。

谢谢

4

3 回答 3

1

FileAttributes.Archive | FileAttributes.ReadOnly意味着组合(按位或)两个值。调用Equal()意味着比较是否相等。因此,true当且仅当文件同时设置了存档位只读位时,它才会产生。

于 2013-02-13T17:20:45.300 回答
1

该代码完全是错误的。写它的人搞砸了,直到他们得到它的工作。FileAttributes 是具有 [Flags] 属性的 Enum 类型。这意味着可以设置任何标志组合。这就是 OR 运算符的作用,它结合了 Archive 和 ReadOnly 属性。

这是偶然的,一个文件通常打开了存档属性。一旦用户备份文件,代码就会惨遭失败。这会关闭 Archive 属性,并且 Equals() 方法不再起作用,即使文件仍然是只读的。

您必须修复此错误。让它看起来像这样:

If (File.GetAttributes(FileName) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then
   '' It is read-only
   ''...
End If
于 2013-02-13T17:23:10.237 回答
1
 File.GetAttributes(FileName) _
    .Equals(FileAttributes.Archive | FileAttributes.ReadOnly)

只有在以下情况下才会返回 true:

  • Archive 和 ReadOnly 位均已设置,

  • 没有设置其他 FileAttributes 位(例如 Hidden、System、Compressed...)。

乍一看,这似乎不是一个非常有用的测试 - 为什么要排除压缩文件?

于 2013-02-13T17:27:33.247 回答