0

よく知らないアプリケーションをデバッグしようとしています。

コードのどこかに、次のように表示されます。

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

FileAttributes.Archive | FileAttributes.ReadOnly(単一のパイプを使用して)正確には何をテストしますか?ファイルがアーカイブされているか読み取り専用であるかを確認するためだと推測しましたが、ファイルはアーカイブされてお​​り、テストは false を返します。

ありがとう

4

3 に答える 3

1

FileAttributes.Archive | FileAttributes.ReadOnly両方の値を結合 (ビットごとの OR) することを意味します。Call toEqual()は、等しいかどうかを比較することを意味します。したがって、ファイルにアーカイブビット読み取り専用ビットの両方trueが設定されている場合にのみ生成されます。

于 2013-02-13T17:20:45.300 に答える
1

そのコードは完全に間違っています。それを書いた人は誰でも、それが機能するまでいじりました。FileAttributes は [Flags] 属性を持つ列挙型です。つまり、フラグの任意の組み合わせを設定できます。これが OR 演算子の機能であり、Archive 属性と ReadOnly 属性の両方を組み合わせます。

偶然にも機能しますが、ファイルのアーカイブ属性がオンになっていることがよくあります。ユーザーがファイルをバックアップすると、コードは惨めに失敗します。これにより、アーカイブ属性がオフになり、ファイルがまだ読み取り専用であっても、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 に答える