2017-12-29 15 views
0

이 (읽을 수없는 파일의 경우 해당 속성에 "거부"로 설정된 읽기 권한이 읽기 권한 또는 파일이없는 파일을 코드읽을 수없는 파일은

#include <iostream> 
    #include <windows.h> 
    int main() 
    { 
     WIN32_FILE_ATTRIBUTE_DATA wfad; 

     GetFileAttributesEx(("C:\\TEMP\\noreadfile"), GetFileExInfoStandard, &wfad); //"noreadfile" is unreadable file 
     std::cout << wfad.dwFileAttributes; // 128             
     return 0; 
    } 

의 다음 코드를 고려 창에 속성 -> 보안 탭)에서 GetFileAttributesExFILE_ATTRIBUTE_NORMAL을 반환합니다. 이는 해당 파일에 대해 no other attribute is set을 의미합니다.

이 특성은 쓰기 가능 파일과 읽기 전용이 아닌 파일에 대해서도 반환됩니다.

이 정보를 사용하여 제품 코드의 파일에 대한 사용 권한을 설정합니다.

읽을 수없는 파일의 경우 GetFileAttributesEx이 잘못된 특성을 반환 할 수 있다고 결론을 냈습니다. 우리의 결론이 옳은지 아닌지 궁금합니다.

그렇다면 GetFileAttributesEx의 알려진 문제입니까?

그렇지 않으면 다음 Windows API 또는 가능하면 ++ 파일 시스템 라이브러리를 부스트 또는 표준 C를 사용하여 사용하여 읽을 수없는 파일에 대한

파일 특성을 얻을 수있는 올바른 방법은 무엇입니까 (아마 파일 권한은?)?

+1

파일 속성 (예 : 읽기 전용, 시스템, 숨김 등)은 파일 보안과 관련이 없습니다. 파일의 임의 액세스 제어 목록 (DACL)을 가져 오려면 ['GetNamedSecurityInfo'] (https://msdn.microsoft.com/en-us/library/aa446645)를 호출하십시오. – eryksun

답변

1

아마 전혀 성공하지 못합니다. documentation for GetFileAttributesEx을 보면 실제로 BOOL을 반환합니다.

반환 값 함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다. 오류 정보를 얻으려면 GetLastError으로 전화하십시오.

통화가 실패하면 "fwad"가 정의되지 않은 것 같습니다. 실패 표시에 대한 리턴 값을 점검하십시오. 내 생각 엔 GetLastError는 ERROR_ACCESS_DENIED과 같은 것을 반환합니다.

Windows API는 예외를 throw하지 않으므로 불행히도 모든 반환 값을 확인해야합니다.

+0

OP가 성공을 확인해야하는 것은 맞지만, 파일 보안이 파일을 읽을 권리를 거부하더라도이 경우 파일 속성 읽기가 실패 할 것 같지 않습니다. OP는 "C : \ Temp"라는 상위 디렉토리를 나열 할 가능성이 매우 높습니다. 이것은 암시 적으로 디렉토리에있는 파일의 속성을 읽도록 허용합니다. – eryksun

+0

마찬가지로 디렉토리에 대한 delete-child 액세스는 파일의 보안이 허용하지 않는 경우에도 읽기 전용 속성이 설정되지 않은 파일을 삭제할 수 있습니다. 부모 디렉토리 보안이 포함 된 파일의 보안보다 우선하는 두 가지 경우입니다. – eryksun

+0

이상한 ... 일반 "읽기"액세스는 [read to go to] (https://technet.microsoft.com/en-us/library/cc783530(v= ws.10) .aspx)의 "read attribute"를 포함합니다. 그러나 내가 알 수있는 한, 그들이 속한 디렉토리를 나열 할 수 있다면 모든 파일의 모든 속성을 볼 수 있습니다. –

관련 문제