Влияние символьных ссылок на функции файловых систем

Использование символических ссылок влияет на несколько стандартных функций файлов, использующих имена путей для указания одного или нескольких файлов. В этом разделе перечислены эти функции и описаны изменения в поведении:

В описаниях ниже используются следующие термины:

  • Исходный файл — исходный файл, который требуется скопировать.
  • Целевой файл — только что созданная копия файла.
  • Целевой объект — сущность, на которую указывает символьная ссылка.

Примечание

Поведение функций, которые принимают дескриптор, созданный с помощью функции CreateFile , например GetFileTime , будет отличаться в зависимости от того, была ли функция CreateFile вызвана с помощью флага FILE_FLAG_OPEN_REPARSE_POINT . Дополнительные сведения см. в разделах 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_ALWAYS, TRUNCATE_EXISTING или FILE_FLAG_DELETE_ON_CLOSE , затронутый файл является символьной ссылкой.

Если FILE_FLAG_OPEN_REPARSE_POINT не указан, и:

  • Если существующий файл открыт и является символьной ссылкой, возвращенный дескриптор является дескриптором целевого объекта.
  • Если указаны CREATE_ALWAYS, TRUNCATE_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