2016-09-05 6 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를 인쇄합니다. 세 번째 숫자는입니다. line)

+0

하위 호환성. 대신 File.GetAttributes()를 사용하면 throw됩니다. –

답변

1

이것은 단지 추측이며 소스가 혼란 스럽지만 코드가 초기화되지 않은 데이터 (예 : int 기본값이 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 속성은 속성에 액세스하기 전에 사실 확인을 기대하는 합리적인 것 같다.