2011-09-14 3 views
1

내가 하드 링크복사 프로그램

를 해결하지 않고 전체 폴더를 복사 할 윈도우 (Win32 API를)에 하드 링크를 해결하지 않고 폴더

예 :

Folder1 
    | 
    +---File1 
     File2 
     HardLink3 -> File3 

(HardLink3는 fsutil hardlink create 또는 mklink를 사용하여 만든)

이 폴더를 복사하려면

Folder2 
    | 
    +---File1 
     File2 
     HardLink3 -> File3 

파일은 File3

에 하드 링크를 가리키는으로 Folder2 폴더 \ HardLink3을 유지

이 내가 파일에 의해 CopyFile 수/CreateHardLink 파일을해야 할 경우, 무엇을, 의미, 또는 API 호출이있는 폴더 전체를 복사 할 수있는 Win32 API를 호출 있는가 주어진 파일이 하드 링크인지 확인하려면?

+0

file.copy()를 사용 하시겠습니까? –

+0

@Emaad : .NET을 사용하지 않지만 [File.Copy] (http://msdn.microsoft.com/es-es/library/system.io.file.copy%28v=vs)의 도움을받습니다. 80 % 29.aspx)는 하드 링크 해상도에 대해서는 아무 말도하지 않습니다. – PabloG

+0

먼저 무엇을 사용하고 있는지 말해주십시오. –

답변

2

파일 형식이 확실한 경우 파일에 여러 링크 (예 : '하드 링크)가 있는지 확인하는 가장 쉬운 방법은 GetFileInformationByHandle 일 것입니다.

반환되는 값은 일반 파일의 경우 1이고 파일이 하드 링크 인 경우 1보다 커야합니다.

시나리오를 올바르게 이해했다면 하드가 아닌 특정 파일 집합 ("공유 폴더"에있는 파일) 중 하나에 하드 링크되어 있는지 여부를 확인하는 것이 더 현명 할 수 있습니다 어디서나 파일에 링크됩니다. 이렇게하려면 하드 링크의 원본 파일과 동일한 파일 ID (nFileIndexHighnFileIndexLow)를 확인하십시오.

후자의 경우 GetFileInformationByHandleExFileIdBothDirectoryInfo 옵션과 함께 사용하면 한 번의 작업으로 주어진 디렉토리의 모든 파일에 대한 이름과 파일 ID를 읽을 수 있습니다.

2

Win32 API 호출이 모두 한 번에 원하는 것을 수행하지 않는다고 생각합니다. 따라서이 작업을 수동으로 수행해야합니다.

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

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

관련 문제