ファイル システム関数に対するシンボリック リンク効果

パス名を使用して 1 つ以上のファイルを指定するいくつかの標準ファイル関数は、シンボリック リンクの使用の影響を受けます。 このトピックでは、これらの関数の一覧を示し、動作の変更について説明します。

以下の説明では、次の用語が使用されます。

  • [ソース ファイル] - コピーする元のファイル。
  • コピー先ファイル : 新しく作成されたファイルのコピー。
  • ターゲット - シンボリック リンクが指すエンティティ。

注意

GetFileTime 関数など、CreateFile 関数を使用して作成されたハンドルを受け入れる関数の動作は、CreateFile 関数が FILE_FLAG_OPEN_REPARSE_POINT フラグを使用して呼び出されたかどうかによって異なります。 詳細については、「 CreateFile 」および「 CreateFile」および「CreateFileTransacted 」セクションを参照してください。

 

CopyFile と CopyFileTransacted

ソース ファイルがシンボリック リンクの場合、コピーされた実際のファイルはシンボリック リンクのターゲットになります。

宛先ファイルが既に存在し、シンボリック リンクである場合、シンボリック リンクのターゲットはソース ファイルによって上書きされます。

CopyFileEx

COPY_FILE_COPY_SYMLINKが指定されている場合は、次のようになります。

  • ソース・ファイルがシンボリック・リンクの場合は、ターゲット・ファイルではなくシンボリック・リンクがコピーされます。
  • ソース ファイルがシンボリック リンクでない場合、動作に変更はありません。
  • 宛先ファイルが既存のシンボリック・リンクの場合は、ターゲット・ファイルではなくシンボリック・リンクが上書きされます。
  • COPY_FILE_FAIL_IF_EXISTSも指定され、宛先ファイルが既存のシンボリック リンクである場合、操作は失敗します。

COPY_FILE_COPY_SYMLINKが指定されていない場合は、次のようになります。

  • COPY_FILE_FAIL_IF_EXISTSも指定され、宛先ファイルが既存のシンボリック リンクである場合、シンボリック リンクのターゲットが存在する場合にのみ操作は失敗します。
  • COPY_FILE_FAIL_IF_EXISTSが指定されていない場合、動作に変更はありません。

Windows Server 2003 および Windows XP:COPY_FILE_COPY_SYMLINK フラグはサポートされていません。 ソース ファイルがシンボリック リンクの場合、コピーされた実際のファイルはシンボリック リンクのターゲットになります。

CreateFile と CreateFileTransacted

この関数の呼び出しによって新しいファイルが作成された場合、動作に変更はありません。

FILE_FLAG_OPEN_REPARSE_POINTが指定されている場合は、次のようになります。

  • 既存のファイルが開かれてシンボリック リンクである場合、返されるハンドルはシンボリック リンクへのハンドルです。
  • CREATE_ALWAYSTRUNCATE_EXISTING、またはFILE_FLAG_DELETE_ON_CLOSEが指定されている場合、影響を受けるファイルはシンボリック リンクです。

FILE_FLAG_OPEN_REPARSE_POINTが指定されていない場合は、次のようになります。

  • 既存のファイルが開かれてシンボリック リンクである場合、返されるハンドルはターゲットへのハンドルです。
  • CREATE_ALWAYSTRUNCATE_EXISTING、またはFILE_FLAG_DELETE_ON_CLOSEが指定されている場合、影響を受けるファイルはターゲットです。

パスがシンボリック リンクを指している場合、関数はターゲットへのハード リンクを作成します。

DeleteFile と DeleteFileTransacted

パスがシンボリック リンクを指している場合、シンボリック リンクは削除され、ターゲットは削除されません。 ターゲットを削除するには、 CreateFile を呼び出し、 FILE_FLAG_DELETE_ON_CLOSEを指定する必要があります。

FindFirstChangeNotification

パスがシンボリック リンクを指している場合は、ターゲットの通知ハンドルが作成されます。 シンボリック・リンクを含むディレクトリーの変更通知を受け取るためにアプリケーションが登録されている場合、アプリケーションはシンボリック・リンクが変更されたときにのみ通知され、ターゲット・ファイルは通知されません。

FindFirstFile と FindFirstFileTransacted

パスがシンボリック リンクを指している場合、 WIN32_FIND_DATA バッファーには、ターゲットではなくシンボリック リンクに関する情報が含まれます。

FindFirstFileEx

パスがシンボリック リンクを指している場合、 WIN32_FIND_DATA バッファーには、ターゲットではなくシンボリック リンクに関する情報が含まれます。

FindNextFile

パスがシンボリック リンクを指している場合、 WIN32_FIND_DATA バッファーには、ターゲットではなくシンボリック リンクに関する情報が含まれます。

GetBinaryType

パスがシンボリック リンクを指している場合は、ターゲット ファイルが使用されます。

GetCompressedFileSize と GetCompressedFileSizeTransacted

パスがシンボリック リンクを指している場合、関数はターゲットのファイル サイズを返します。

GetDiskFreeSpace

パスがシンボリック リンクを指している場合、操作はターゲットに対して実行されます。

GetDiskFreeSpaceEx

パスがシンボリック リンクを指している場合、操作はターゲットに対して実行されます。

GetFileAttributes

パスがシンボリック リンクを指している場合、関数はシンボリック リンクの属性を返します。

GetFileAttributesEx

パスがシンボリック リンクを指している場合、関数はシンボリック リンクの属性を返します。

GetFileSecurity

パスがシンボリック リンクを指している場合、関数はシンボリック リンクの属性を返します。

GetTempPath

パスがシンボリック リンクを指している場合、一時パス名はシンボリック リンクを保持します。

GetVolumeInformation

パスがシンボリック リンクを指している場合、関数はターゲットのボリューム情報を返します。

SetFileAttributes

パスがシンボリック リンクを指している場合、関数はシンボリック リンクの属性を取得します。

SetFileSecurity

パスがシンボリック リンクを指している場合、関数はシンボリック リンクの属性を返します。

CopyFile

CopyFileTransacted

CopyFileEx

CreateFile

CreateFileTransacted

CreateHardLink

CreateHardLinkTransacted

DeleteFile

DeleteFileTransacted

FindFirstChangeNotification

FindFirstFile

FindFirstFileEx

FindFirstFileTransacted

FindNextFile

GetBinaryType

GetCompressedFileSize

GetCompressedFileSizeTransacted

GetDiskFreeSpace

GetDiskFreeSpaceEx

GetFileAttributes

GetFileAttributesEx

GetFileSecurity

GetTempPath

GetVolumeInformation

SetFileAttributes

SetFileSecurity