GetFileAttributes
基本概念
GetFileAttributes是Windows系统提供的一个文件操作API函数,用于获取指定文件或目录的属性信息。它可以判断文件是否存在、是否为目录、是否为只读文件等多种属性。
GetFileAttributes是一个宏,根据项目是否定义UNICODE宏,会映射到宽字符版本(GetFileAttributesW)或ANSI版本(GetFileAttributesA)。
基本语法
1 2 3 4 5 6 7
| DWORD GetFileAttributesW( [in] LPCWSTR lpFileName );
DWORD GetFileAttributesA( [in] LPCSTR lpFileName );
|
返回值
成功:返回一个DWORD类型的值,该值是文件属性的组合(多个属性通过位或|组合)。
失败:返回INVALID_FILE_ATTRIBUTES,此时可通过GetLastError()获取具体错误原因(如文件不存在、权限不足等)。
简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include <Windows.h> #include <stdio.h>
int main() { LPCWSTR path = L"C:\\example.txt"; DWORD attributes = GetFileAttributesW(path); if (attributes == INVALID_FILE_ATTRIBUTES) { DWORD errorCode = GetLastError(); printf("获取属性失败!错误码:%d\n", errorCode); return 1; } printf("路径:%ls 的属性信息:\n", path); if (attributes & FILE_ATTRIBUTE_DIRECTORY) { printf("类型:目录\n"); } else { printf("类型:文件\n"); } if (attributes & FILE_ATTRIBUTE_READONLY) { printf("状态:只读\n"); } if (attributes & FILE_ATTRIBUTE_HIDDEN) { printf("状态:隐藏\n"); } if (attributes & FILE_ATTRIBUTE_SYSTEM) { printf("状态:系统文件\n"); } return 0; }
|
SetFileAttributes
基本概念
SetFileAttributes是Windows系统中与GetFileAttributes对应的API函数,用于设置文件或目录的属性(如只读、隐藏、系统文件等)。它可以修改文件的各种状态标识,是文件属性管理的核心工具。
SetFileAttributes是一个宏,根据项目是否定义UNICODE宏,会映射到宽字符版本(SetFileAttributesW)或ANSI版本(SetFileAttributesA)。
基本语法
1 2 3 4 5 6 7 8 9
| BOOL SetFileAttributesW( [in] LPCWSTR lpFileName, [in] DWORD dwFileAttributes );
BOOL SetFileAttributesA( [in] LPCSTR lpFileName, [in] DWORD dwFileAttributes );
|
可设置的常见属性
常量 值(十六进制) 说明
FILE_ATTRIBUTE_READONLY 0x00000001 设置为只读(取消时需清除该位)
FILE_ATTRIBUTE_HIDDEN 0x00000002 设置为隐藏文件
FILE_ATTRIBUTE_SYSTEM 0x00000004 设置为系统文件
FILE_ATTRIBUTE_ARCHIVE 0x00000020 设置为归档文件(通常用于标记需备份的文件)
FILE_ATTRIBUTE_NORMAL 0x00000080 普通文件(无特殊属性,必须单独使用)
通过位或|组合多个属性。
简单示例
设置为”只读+隐藏”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <Windows.h> #include <stdio.h>
int main() { LPCWSTR path = L"C:\\test.txt"; BOOL success = SetFileAttributesW(path, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN); if (!success) { DWORD error = GetLastError(); printf("设置属性失败!错误码:%d\n", error); return 1; } printf("文件属性设置成功!\n"); return 0; }
|
取消只读属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <Windows.h> #include <stdio.h>
int main() { LPCWSTR path = L"C:\\test.txt"; DWORD currentAttr = GetFileAttributesW(path); if (currentAttr == INVALID_FILE_ATTRIBUTES) { printf("获取属性失败!错误码:%d\n", GetLastError()); return 1; } DWORD newAttr = currentAttr & ~FILE_ATTRIBUTE_READONLY; if (!SetFileAttributesW(path, newAttr)) { printf("取消只读属性失败!错误码:%d\n", GetLastError()); return 1; } printf("已取消只读属性!\n"); return 0; }
|
设置为”普通文件”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <Windows.h> #include <stdio.h>
int main() { LPCWSTR path = L"C:\\test.txt"; if (!SetFileAttributesW(path, FILE_ATTRIBUTE_NORMAL)) { printf("设置失败!错误码:%d\n", GetLastError()); return 1; } printf("文件已设置为普通属性(无只读/隐藏等)!\n"); return 0; }
|