2010-12-18 5 views
0

파일을 동일한 디렉토리로 이동시키는 코드가 있습니다.파일이 중복인지 확인하고 파일 이름이 중복되지 않은 경우 이름을 바꿉니다.

  • 파일이 디렉토리의 기존 파일과 중복되면 감지 할 수 있습니까? 이는 소스를 삭제할지 또는 그대로 둘지 여부를 결정하는 것입니다.
  • 같은 이름이지만 다른 내용의 대상 파일이 이미있는 경우 원본 파일의 이름을 바꿉니 까?

답변

2

중복 파일을 검색 하시겠습니까?

대부분의 프로그래밍 언어는 FileExists이 파일 이름을 복용하고, 지정된 이름의 파일이 파일 시스템에 존재하는지 여부를 나타내는 부울을 반환 유사한 기능이라고 뭔가를해야합니다.

이름은 같지만 내용이 다른 파일을 처리 할 수 ​​있습니까?

두 파일 모두에 대한 체크섬을 계산하고 해시를 비교하십시오. 다시 한 번 대부분의 언어는 파일 내용을 나타내는 바이트 배열을 취하고 SHA1 해시를 나타내는 바이트 배열을 반환하는 sha1 함수를 갖습니다.

+0

대상 파일이 이미 존재하는지 테스트하고 있습니다. 제가하고 싶은 것은 다음과 같습니다. 대상 파일이 존재하고 동일하면 소스 파일을 무시하십시오. 대상 파일이 있지만 내용이 다른 경우 일관된 이름 바꾸기 알고리즘을 적용하고 XML 또는 DB에 원본 파일 이름의 추적을 유지하십시오. –

1

글쎄, 쉬운 방법은 cyclic redundancy check입니다. 여러 언어에는이 기능이 구현되어 있습니다. 파일의 md5 합계를 계산할 수도 있습니다. 이것은 100 % 믿을만한 것은 아닙니다.

IDENTICAL인지 확인해야하는 경우 두 파일에 대한 스트림을 열고 바이트별로 비교해야합니다.

중복 된 파일 이름에 대한 검사는 명백합니다.

편집 : 파일이 많은 경우 파일 크기를 비교하십시오. 일치하지 않으면 평등 할 수 없습니다.

+0

감사합니다. 왜 CRC32와 MD5는 100 % 신뢰성이 있지 않습니까? 나는 현재 파일이 안전 장치로 제대로 복사되었는지 확인하기 위해 md5를 사용하고 있습니다. 또한 파일을 추가 할 때 MD5를 확인하는 목록을 가지고 있다고 생각했습니다. 그러나이 방법은 많은 수의 파일이있는 경우 비효율적 일 수 있습니다. 알고리즘을 사용하여 비교 횟수를 줄임으로써 해결할 수 있습니다. 동일한 파일 이름에 관해서는 원래 파일 이름 (아마도 DB에 있음)을 추적하여 다른 이름으로 복사하고 싶습니다. –

+1

충돌을 일으킬 수 있습니다. 얼마나 많은 파일 집합을 다루고 있습니까? – alexn

1

간편한 방법으로 원래 파일 이름이 필요하지 않은 경우 "content"파일의 MD5 또는 SHA1 해시를 계산하고 파일 이름을 바꿉니다. :-)

+0

그건 나쁜 생각이 아닙니다. 파일 이름을 사람이 읽을 수 없게 만들지 만 이름 중복을 피할 수 있습니다. 또한 충돌이있는 경우 alexn이 설명 된대로 접미사를 추가 할 수 있습니다. –

관련 문제