카테고리 없음

[창] Windows (Win32 API)에서 하드 링크를 확인하지 않고 프로그래밍 방식으로 폴더 복사

행복을전해요 2020. 12. 23. 14:48

이것이 원하는 작업이라고 확신하는 경우 파일에 여러 링크 (예 : "하드 링크")가 있는지 확인하는 가장 쉬운 방법은 아마도입니다 GetFileInformationByHandle.

nNumberOfLinks반환 되는 값은 일반 파일의 경우 1이고 파일이 하드 링크 인 경우 1 이상입니다.

귀하의 시나리오를 올바르게 이해했다면 파일이 특정 파일 세트 ( "공유 폴더"의 파일) 중 하나에 하드 링크되었는지 여부를 확인하는 것이 파일에 하드 링크되었는지 여부를 확인하는 것이 더 합리적 일 수 있습니다. 어딘가에. 이렇게하려면 하드 링크의 경우 원본 파일과 동일한 파일 ID ( nFileIndexHighnFileIndexLow)를 확인합니다.

후자의 경우 최적화 로 단일 작업으로 주어진 디렉토리에있는 모든 파일의 이름과 파일 ID를 읽는 옵션 GetFileInformationByHandleEx과 함께 사용할 수 있습니다 FileIdBothDirectoryInfo.

-------------------

한 번에 원하는 작업을 모두 수행하는 Win32 API 호출이 없다고 생각하므로이 작업을 직접 수행해야 할 것입니다.

파일이 하드 링크인지 아닌지 확인하는 것은 아마도 원하는 작업이 아닐 것입니다. 파일이 심볼릭 링크, 디렉토리 (또는 재분석 지점 또는 기타 모호한 것)가 아닌 경우 실제로 하드 링크입니다. 즉, 파일 이름이 디스크에 저장된 파일을 가리 킵니다. 따라서 두 파일이 동일한 데이터를 가리키는 경우 둘 다 해당 파일에 대한 하드 링크입니다.

어쨌든 파일에 대한 모든 하드 링크를 열거하는 Win32 메서드는 FindFirstFileNameW 및 FindNextFileNameW입니다.



출처
https://stackoverflow.com/questions/7420168