setFileAttributesTransactedA 函数 (winbase.h)

[Microsoft 强烈建议开发人员利用替代方法来实现应用程序的需求。 TxF 开发的许多方案都可以通过更简单、更易用的技术来实现。 此外,TxF 在 Microsoft Windows 的未来版本中可能不可用。 有关详细信息以及 TxF 的替代方法,请参阅 使用事务 NTFS 的替代方法。]

将文件或目录的属性设置为事务处理操作。

语法

BOOL SetFileAttributesTransactedA(
  [in] LPCSTR lpFileName,
  [in] DWORD  dwFileAttributes,
  [in] HANDLE hTransaction
);

参数

[in] lpFileName

要设置其属性的文件的名称。

默认情况下,名称限制为MAX_PATH个字符。 若要将此限制扩展到 32,767 个宽字符,请在路径前面添加“\\?\”。 有关详细信息,请参阅命名文件、路径和命名空间

提示

从 Windows 10 版本 1607 开始,可以选择删除MAX_PATH限制,而无需在前面添加“\\?\”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。

文件必须驻留在本地计算机上;否则,函数将失败,最后一个错误代码设置为 ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE

[in] dwFileAttributes

为文件设置的文件属性。

有关文件属性值的列表及其说明,请参阅 文件属性常量。 此参数可以是一个或多个值,使用按位 OR 运算符进行组合。 但是,所有其他值都替代 FILE_ATTRIBUTE_NORMAL

此函数并非支持所有属性。 有关详细信息,请参见“备注”部分。

下面是支持的属性值列表。

FILE_ATTRIBUTE_ARCHIVE (32 (0x20) )

FILE_ATTRIBUTE_HIDDEN (2 (0x2) )

FILE_ATTRIBUTE_NORMAL (128 (0x80) )

FILE_ATTRIBUTE_NOT_CONTENT_INDEXED (8192 (0x2000) )

FILE_ATTRIBUTE_OFFLINE (4096 (0x1000) )

FILE_ATTRIBUTE_READONLY (1 (0x1) )

FILE_ATTRIBUTE_SYSTEM (4 (0x4) )

FILE_ATTRIBUTE_TEMPORARY (256 (0x100) )

[in] hTransaction

事务的句柄。 此句柄由 CreateTransaction 函数返回。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

下表介绍了如何设置无法使用 SetFileAttributesTransacted 设置的属性。 请注意,这些操作不是事务处理的操作。

属性 如何设置
FILE_ATTRIBUTE_COMPRESSED

0x800

若要设置文件的压缩状态,请将 DeviceIoControl 函数与 FSCTL_SET_COMPRESSION 操作一起使用。
FILE_ATTRIBUTE_DEVICE

0x40

保留;请勿使用。
FILE_ATTRIBUTE_DIRECTORY

0x10

文件无法转换为目录。 若要创建目录,请使用 CreateDirectoryCreateDirectoryEx 函数。
FILE_ATTRIBUTE_ENCRYPTED

0x4000

若要创建加密文件,请将 CreateFile 函数与 FILE_ATTRIBUTE_ENCRYPTED 属性一起使用。 若要将现有文件转换为加密文件,请使用 EncryptFile 函数。
FILE_ATTRIBUTE_REPARSE_POINT

0x400

若要将重新分析点与文件或目录相关联,请将 DeviceIoControl 函数与 FSCTL_SET_REPARSE_POINT 操作一起使用。
FILE_ATTRIBUTE_SPARSE_FILE

0x200

若要设置文件的稀疏属性,请将 DeviceIoControl 函数与 FSCTL_SET_SPARSE 操作一起使用。
 

如果文件在事务中打开以供修改,则在提交事务之前,任何其他线程都无法成功打开该文件进行修改。 如果事务处理线程首先打开文件,则尝试在提交事务之前打开文件进行修改的任何后续线程都将收到共享冲突。 如果非事务线程在事务处理线程之前打开文件进行修改,并且当事务处理线程尝试打开该文件时,该文件仍然处于打开状态,则事务将收到 ERROR_TRANSACTIONAL_CONFLICT 错误。

有关事务的详细信息,请参阅 事务 NTFS

在 Windows 8 和 Windows Server 2012 中,以下技术支持此函数。

技术 支持
(SMB) 3.0 协议的服务器消息块
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CsvFS)
弹性文件系统 (ReFS)
 

SMB 3.0 不支持 TxF。

事务处理操作

如果文件在事务中打开以供修改,则在提交事务之前,任何其他线程都不能打开该文件进行修改。 因此,如果事务处理线程首先打开文件,则尝试在提交事务之前修改文件的任何后续线程都会收到共享冲突。 如果非事务处理线程在事务处理线程修改文件之前修改了文件,并且当事务尝试打开该文件时该文件仍处于打开状态,则事务 会收到错误ERROR_TRANSACTIONAL_CONFLICT

注意

winbase.h 标头将 SetFileAttributesTransacted 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

文件特性常量

文件管理功能

GetFileAttributesTransacted

符号链接

事务性 NTFS