2016-09-05 4 views
1

は以下のコードを検討 - documentation当たりよう存在しないファイルに対してFileAttributesの値が-1であるのはなぜですか?

FileInfo fileInfo = new FileInfo("C:\\doesNotExist.txt"); 
Console.WriteLine(fileInfo.Attributes); 
Console.WriteLine(fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly)); 

を列挙するためのデフォルト基底型は INTと-1の値を持つ INTは、基本的にバイナリですべて1です。 FileAttributesはそのメンバー値(as stated here)のビット単位の組み合わせを許可するため、FileAttributes -1のデフォルト値は、存在しないファイルがすべての可能なFileAttributesを所有していることを意味するのではないかと思われます(上記のコードでは、 True )

+0

下位互換性。代わりにFile.GetAttributes()を使用すると、スローされます。 –

答えて

1

これは唯一の推測であり、ソースが混乱していますが、初期化されていないデータ(つまり、デフォルト値が0のデータ)と、存在しないファイルのファイル属性のように初期化されていますが、値はありません。ファイルが見つからない場合source code for File.FillAttributeInfo

// Returns 0 on success, otherwise a Win32 error code. Note that 
// classes should use -1 as the uninitialized state for dataInitialized. 

そしてthenから

if (!returnErrorOnNotFound) { 
    // Return default value for backward compbatibility 
    dataInitialised = 0; 
    data.fileAttributes = -1; 
} 

FileInfoオブジェクトのExistsプロパティは、属性にアクセスする前に、真実であることを確認するために発信者を予想するのが妥当と思われます。

関連する問題