2011-09-14 16 views
1

我想不解決硬鏈接複製程序不解決硬鏈接在Windows的(Win32 API)

拷貝整個文件夾的文件夾

例如:

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

(HardLink3創建使用fsutil hardlink createmklink

我要將此文件夾複製到

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

保持文件夾2 \ HardLink3作爲硬鏈接指向文件3

是否有一個Win32 API調用的整個文件夾複製與 這個語義,或者,如果我需要做的CopyFile/CreateHardLink 文件通過文件,有什麼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

對於普通文件,nNumberOfLinks返回值爲1,如果文件是(或有)硬鏈接,則返回值爲1以上。

如果我已經正確理解了你的場景,檢查一個文件是否與一組特定文件(「共享文件夾」中的文件)中的某一個硬鏈接,而不是它是否很難鏈接到任何地方的任何文件爲此,請查看文件ID(nFileIndexHighnFileIndexLow),對於硬鏈接,它與原始文件相同。

在後一種情況下,作爲優化,您可以使用GetFileInformationByHandleExFileIdBothDirectoryInfo選項在單個操作中讀取給定目錄中所有文件的名稱和文件ID。

2

我不認爲有一個Win32 API調用來做你想要的一切,所以你可能需要手工完成。

檢查文件是否是硬鏈接可能不是你想要做的。如果文件不是符號鏈接,目錄(或重新分析點或其他一些不明確的事物),則它實際上是一個硬鏈接,即文件的名稱指向磁盤上存儲的文件。因此,如果兩個文件指向相同的數據,則它們都是該文件的硬鏈接。

無論如何,枚舉所有到文件的硬鏈接的Win32方法是FindFirstFileNameW和FindNextFileNameW。