2017-12-20 26 views
0

디렉터리가 80 개이고 디렉토리의 체크섬을 확인하고 싶습니다.디렉터리 체크섬

디렉토리의 내용이 최신 버전과 일치하는지 확인하고 싶습니다.

저는 실시간 시스템으로 작업하므로 효율적이어야합니다.

일부 파일 체크섬 기능을 발견했습니다.

내 질문은 : 모든 파일을 반복하지 않고 디렉토리에 체크섬을 수행 할 수 있습니까?

+2

"내 질문은 모든 파일을 반복하지 않고 디렉토리로 옮길 수 있습니까?" "디렉토리의 체크섬"이 의미하는 바에 달려 있습니다. – Slava

+0

런타임에 디렉토리를 읽고 내용이 유효한지 확인하고 싶습니다. – LIOR

+1

각 파일의 내용을 확인해야합니까? 그렇다면 각 파일의 체크섬을 계산해야합니다. – Slava

답변

2

가능한 한 가지 해결책은 파일을 변경하면 각 파일의 수정 날짜 및 해시를 유지하고 파일을 업데이트하는 특수 (숨김) 파일을 유지 관리하는 것입니다. 그런 다음 해당 파일의 해시를 디렉토리의 해시로 사용하십시오. 이렇게하면 모든 파일에 대해 체크섬을 계산하지 못하지만 파일이 변경되면 작업량이 줄어 듭니다. dir의 스냅 샷을 작성해야하는 경우 선택 사항이 없지만 모든 파일을 특정 순서로 체크섬해야합니다.

참고 : 위조 할 수 없다는 강력한 요구 사항이없는 경우 암호화 해시를 사용하지 않는 것이 좋습니다. 암호화 해시는 오히려 느리고 비효율적이며 목적에 부합합니다.

0

귀하의 신청서가 확실하지 않습니다. md5 체크섬은 일반적으로 정확도가 속도보다 선호되는 상황 (또는 파울 플레이에 추가 장벽을 제공하는 데 사용됩니다.)

속도가 왕이되는 빌드 시스템에서 일반적으로 파일 데이트는 디렉터리 일치를 평가하는 데 사용됩니다. 최신 디렉토리에 주어진 예를 들면 다음과 같습니다 filesystem::path foo 문제의 디렉토리는 다음과 같습니다 filesystem::path bar 당신은 단순히 평가 수 :

  1. 이를이 한 줄에 대한

    equal(filesystem::directory_iterator(foo), filesystem::directory_iterator(), filesystem::directory_iterator(bar), filesystem::directory_iterator(), [](const auto& lhs, const auto& rhs) { return filesystem::last_write_time(lhs) == filesystem::last_write_time(rhs); }) 
    

    Live Example

    몇 가지 참고 사항 재귀 함수가 아니며 즉시 날짜 만을 계산합니다 foobar

  2. 있습니다 디렉토리 작업이 내가 수동으로 하나를 업데이트 한 경우 하나의 라이너는 여전히 긍정적으로 응답 할 것입니다 <에 람다의 ==을 변경할 수있는 MD5 체크섬을 통해 엄청난 장점을 가지고 예를 들어 빌드 시스템에서 Visual Studio's implementation of last_write_time seems to have an issue with directories
  3. 파일을 최신 테스트 버전으로 바꾸십시오.