2011-09-14 5 views
1

コピー私はハードリンクに</p> <p>例解決せずにフォルダ全体をコピーしたいWindowsでハードリンクを解決せずに、プログラムフォルダ(の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オプションを使用すると、1回の操作で特定のディレクトリ内のすべてのファイルの名前とファイルIDを読み取ることができます。

2

私はあなたが一人で行ってもらいたいことをするためのWin32 API呼び出しはないと思うので、おそらくこれを手作業で行う必要があります。

ファイルがハードリンクかどうかを確認することは、おそらくあなたがしたいことではありません。ファイルがシンボリックリンク、ディレクトリ(または再解析ポイント、またはその他の不明瞭なもの)でない場合は、実際にはハードリンクです。つまり、ファイルの名前がディスク上の格納ファイルを指しています。したがって、2つのファイルが同じデータを指している場合、それらは両方ともそのファイルへのハードリンクです。

とにかく、ファイルへのすべてのハードリンクを列挙するWin32メソッドは、FindFirstFileNameWとFindNextFileNameWです。

関連する問題