2014-04-01 5 views
2

in C# DropNet lib를 사용하여 로컬 파일 및 Dropbox 폴더를 동기화 할 클라이언트를 생성하고 있습니다.
동일한 파일이 클라우드와 로컬 폴더에 모두있는 경우 해당 파일이 동일한 지 또는 둘 중 더 최신 파일인지를 어떻게 확인합니까? 클라우드 파일의 ModifiedDate를 로컬 파일의 LastWriteTime과 비교하면 클라이언트 시간이 보관 용 계정의 서버 시간과 다르기 때문에이 날짜가 항상 충돌합니다. 효율적인 파일 비교를 수행하려면 어떻게해야합니까?로컬 파일 및 클라우드 파일 비교 (DropNet lib로 Dropbox 사용)

+0

두 파일의 해시 (md5, sha1 등)를 계산하여 비교합니다. – Alberto

+0

Dropnet lib에서는 파일을 다운로드하지 않고이 컨트롤을 확인할 수 있습니까? –

답변

4

드롭 박스 API를 사용하면 일반 보관 에코 시스템과 인터페이스 할 수 있고, 드롭 박스와 동기화 할 때 잘 하나의 계정에 2 개 이상의 클라이언트가있을 수 있습니다. 이를 조정하기 위해 보관 용 서버는 진실의 원천으로 간주됩니다. 따라서 Dropbox와 동기화 할 때 서버에서 모든 변경 사항을 가져 와야하고 가능한 한 빨리 모든 로컬 변경 사항을 서버에보고해야합니다.

Dropbox API는 현재 원격 파일에 대한 파일 ID 또는 해시를 가져 오는 방법을 제공하지 않지만 (기능 요청으로이 파일을 고정시키고 있지만) 파일이 있는지 여부를 알 수있는 방법을 제공합니다 원격으로 변경되어 지역의 상태를 업데이트 할 수 있습니다. 은/메타 데이터 API 호출을 통해 특정 경로에서 파일의 "REV"속성을 사용하는 방법 중 하나 : 당신이 마지막으로 확인하기 때문에 회전이 변경된 경우

https://www.dropbox.com/developers/core/docs#metadata

, 해당 경로에 파일이 변경되었습니다 . 당신은 때때로 당신이 다시 날짜까지 얻을 수 있도록 로컬 상태로 만들기 위해 필요한 모든 변화를 찾아이를 호출 할 수 있습니다

https://www.dropbox.com/developers/core/docs#delta

:

또 다른 방법은 델타/사용하는 것입니다.

+0

그래서 해결책은 로그 파일을 로컬로 생성하는 것입니다. 다운로드 한 파일마다 REV. 그것은 좋은 해결책입니다. 그러므로 나는 그 반대를 할 수는 없다고 결론을 내렸지 만, 나는 이미 내 문제를 부분적으로 해결했다. 고맙습니다. –

0

아마도 바이트 단위로 비교하는 것이 가장 올바른 방법 일 것입니다. 파일 해시에 대한 설명은이 링크를 참조하십시오.

https://stackoverflow.com/a/7931320/1706610

그리고 여기 바이트의 파일 비교 방법으로 바이트에 대한 좋은 링크입니다.

http://www.dotnetperls.com/file-equals

+0

해답을 주셔서 감사합니다. 그러나 비교할 파일 중 하나가 클라우드 공간에 있습니다. 나는 당신의 (유효한 지역) 수표를 주기적으로 다운로드 할 수 없다! 그래서 두 가지 파일 (로컬 파일과 클라우드에있는 파일) 중 가장 최신 파일 인 Dropnet을 사용하고 싶습니다. –