setFileAttributesA 函数 (fileapi.h)

设置文件或目录的属性。

若要以事务处理操作的形式执行此操作,请使用 SetFileAttributesTransacted 函数。

语法

BOOL SetFileAttributesA(
  [in] LPCSTR lpFileName,
  [in] DWORD  dwFileAttributes
);

参数

[in] lpFileName

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

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

提示

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

[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)
只读文件。 应用程序可以读取文件,但不能写入或删除该文件。 在目录上不遵循此属性。 有关详细信息,请参阅“无法在 Windows Server 2003、Windows XP 或 Windows Vista 中查看或更改文件夹的只读或系统属性。
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
操作系统使用其中的一部分或独占使用的文件或目录。
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
用于临时存储的文件。 如果有足够的缓存内存可用,文件系统会避免将数据写回到大容量存储,因为通常情况下,应用程序在句柄关闭后会删除临时文件。 在这种情况下,系统可以完全避免写入数据。 否则,在句柄关闭后写入数据。

返回值

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

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

注解

下表介绍了如何设置无法使用 SetFileAttributes 设置的属性。 有关所有文件属性值及其说明的完整列表,请参阅 文件属性常量。

属性 如何设置
FILE_ATTRIBUTE_COMPRESSED

0x800

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

0x40

保留;请勿使用。
FILE_ATTRIBUTE_DIRECTORY

0x10

文件无法转换为目录。 若要创建目录,请使用 CreateDirectory 或 CreateDirectoryEx 函数。
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。

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

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

示例

有关示例,请参阅 检索和更改文件属性。

注意

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

要求

   
最低受支持的客户端 Windows XP [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 |UWP 应用]
目标平台 Windows
标头 fileapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

文件特性常量

文件管理功能

GetFileAttributes

SetFileAttributesTransacted

符号链接

事务性 NTFS