2011-02-01 2 views
2

정확히 두 파일을 비교하는 방법을 알고 싶습니다. 파일 이름, 작성 날짜/수정 날짜 및 필요에 따라 해시를 비교하는 방법을 알고 있습니다.두 파일이 완전히 동일하면 감지 할 대상은 무엇입니까?

그러나 보안 구성, 호환성 설정, 잠재적 인 바이러스 백신 타임 스탬프 등 파일의 메타 데이터를 비교하는 방법을 모르겠습니다. 실제로 저장 방법을 모르겠습니다. 깊은 순서대로 별도의 컴퓨터

덕분에 스티브

[편집]을 두 개의 파일 시스템을 비교에

내 최종 목표는 I 당신은 MD5 필요

+0

* 동일한 디스크의 동일한 위치에 저장된 것과 똑같이 * 동일합니까? – fredley

+0

어떤 파일 시스템입니까? – OrangeDog

+0

@fredley, 파일 시스템의 같은 위치, 같은 속성, 같은 것 ... 모두 –

답변

2

파일을 구성하는 요소는 무엇입니까? 현대 파일 시스템 (예를 들어 NTFS)에 당신이

  • 파일 atttibutes이
  • 이름 파일 스트림 (시간, FAT 속성)
  • 0 개 이상의 대체 데이터 스트림 (ADS)
  • 확장 속성
  • NTFS 보안 (ADS에 저장되어 있지만 별도로 식별 할 수 있음)

나머지 (구성, 바이러스 백신 타임 스탬프/내용은 무엇인가/등)는 저장됩니다 파일 외부에있는 파일이며 파일이 아닙니다.

그래서 위에서 언급 한 파일의 비트를 확인하고 비교해야합니다.

서로 다른 정보 비트를 읽는 방법은 서로 다르며 모든 정보를 모아 서로 다른 파일을 비교하기 위해서는이 정보를 모두 사용해야합니다.

+0

감사합니다.이게 좋은 시작일 것입니다. –

0

질문의 제목을 재구성 명확히하는 것입니다 SHA는 두 파일을 모두 해시하고 둘 다 같은 합계를 갖는지 비교합니다.

System.Security.Cryptography의 MD5CryptoServiceProvider 및 SHA512CryptoServiceProvider를 확인하십시오.

private string ComputeHashAsText(byte[] fileBytes) 
{ 
    using (SHA512CryptoServiceProvider cryptoService = new SHA512CryptoServiceProvider()) 
    { 
     return Encoding.ASCII.GetString(cryptoService.ComputeHash(fileBytes)); 
    } 
} 

public bool CompareFiles(string pathA, string pathB) 
{ 
    string hashPathA = ComputeHashAsText(File.ReadAllBytes(pathA)); 
    string hashPathB = ComputeHashAsText(File.ReadAllBytes(pathB)); 

    return hashPathA == hashPathB; 
} 

실제 솔루션에서 당신은 아마 파일이 메모리와 해시에 대한 모든 바이트를 읽을 너무 큰 비교하기 때문에, 덩어리 나 이런 일에 해시를 계산 할 수 있습니다 :

그것은이 같은 뭔가 그들.

+0

내 질문은 "비교할 방법"보다 "비교할"것입니다. 하지만 팁 주셔서 감사합니다 –

+0

"비교하는 방법"을 읽었습니다 (귀하의 질문에 "나는 [...]을 (를) 비교하는 방법을 모르겠다.] ") 귀하의 질문에 :! D 그리고 나는 두 파일이 서로 다른 물리적, 네트워크 위치에서 동일한 지 확인하는 가장 좋은 방법이기 때문에 대답했습니다. 메타 데이터에 대해 묻는 것을 알고 있지만, 메타 데이터로 인해 두 개의 파일이 반드시 같아야한다는 것을 알 수있는 좋은 방법은 아닐 것입니다 (두 개의 서로 다른 스트림이 동일한 메타 데이터를 갖는 경우는 무엇입니까?) –

+0

콘텐츠 (쉬운)와 메타 데이터를 모두 비교하고 싶습니다. 전체 파일 시스템의 차이 –

1

System.IO.File의 모든 getters를 통해 작업하십시오.

GetAccessControl 
GetAttributes 
GetCreationTime 
... 
ReadAllBytes 

"동일한 파일"의 당신의 정의는 (절대 경로와 다른 경우 컴퓨터에서처럼)에 따라 다른 작업이 있다면, 다음뿐만 아니라 것을 얻을,하지만 당신은 그게 뭔지 분명히하지 않았다.

+0

"Eugene Mayevski 'EldoS"의 대답은 내가 찾고있는 것입니다. –

관련 문제