4.12 获取设置文件属性
效果


源码
#include
#include
DWORD ShowFileAttributes(LPSTR szPath);//获取并显示文件属性
DWORD ShowFileTime(LPFILETIME lptime);//转换文件时间并打印
DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow);//打印文件大小信息
DWORD ShowFileAttrInfo(DWORD dwAttribute);//打印文件属性
DWORD SetFileHiddenAndReadonly(LPSTR szFileName);//将指定文件设置为隐藏和只读
int main(int argc, PCHAR argv[]){
//待设置文件必须存在
if (argc != 3){
printf("请输入参数:\n");
printf("显示第一个参数指定的文件的属性,时间,大小.\n");
printf("将第二个参数的属性设置为隐藏和只读.\n");
return 1;
}
ShowFileAttributes(argv[1]);
SetFileHiddenAndReadonly(argv[2]);
return 0;
}
//将指定文件设置为隐藏和只读
DWORD SetFileHiddenAndReadonly(LPSTR szFileName){
DWORD dwFileAttributes = GetFileAttributes(szFileName);//获取原来文件的属性
//将只读和隐藏属性附加到原来的文件属性上
dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;
//设置文件属性并判断是否成功
if (SetFileAttributes(szFileName, dwFileAttributes)){
printf("文件 %s 的只读和隐藏属性设置成功\n", szFileName);
} else{
printf("文件 %s 属性设置失败: %d\n", GetLastError());
}
return 0;
}
//打印文件属性
DWORD ShowFileAttrInfo(DWORD dwAttribute){
printf("文件属性: ");
if (dwAttribute & FILE_ATTRIBUTE_ARCHIVE){
printf("ARCHIVE");
}
if (dwAttribute & FILE_ATTRIBUTE_COMPRESSED){
printf("压缩");
}
if (dwAttribute & FILE_ATTRIBUTE_DIRECTORY){
printf("目录");
}
if (dwAttribute & FILE_ATTRIBUTE_ENCRYPTED){
printf("加密");
}
if (dwAttribute & FILE_ATTRIBUTE_HIDDEN){
printf("隐藏");
}
if (dwAttribute & FILE_ATTRIBUTE_NORMAL){
printf("NORMAL");
}
if (dwAttribute & FILE_ATTRIBUTE_OFFLINE){
printf("OFFLINE");
}
if (dwAttribute & FILE_ATTRIBUTE_READONLY){
printf("只读");
}
if (dwAttribute & FILE_ATTRIBUTE_SPARSE_FILE){
printf("SPARSE");
}
if (dwAttribute & FILE_ATTRIBUTE_SYSTEM){
printf("系统文件");
}
if (dwAttribute & FILE_ATTRIBUTE_TEMPORARY){
printf("临时文件");
}
printf("\n");
return 0;
}
//打印文件大小信息
DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow){
ULONGLONG liFileSize;
liFileSize = dwFileSizeHigh;
liFileSize <<= sizeof(DWORD)* 8;//左移32位/4字节
liFileSize += dwFileSizeLow;//加上低4字节的值
printf("文件大小: %I64u 字节\n", liFileSize);
return 0;
}
//转换文件时间并打印
DWORD ShowFileTime(LPFILETIME lptime){
FILETIME ftLocal;//文件时间结构
SYSTEMTIME st;//系统时间结构
FileTimeToLocalFileTime(lptime, &ftLocal);//调整为系统所在时区时间
FileTimeToSystemTime(&ftLocal, &st);//将文件时间转换为SYSTEMTIME格式便于显示
//显示时间信息字符串
printf("%4d 年 %#02d 月 %#02d 日, %#02d:%#02d:%#02d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
return 0;
}
//获取并显示文件属性
DWORD ShowFileAttributes(LPSTR szPath){
WIN32_FILE_ATTRIBUTE_DATA wfad;//文件属性结构
printf("文件: %s\n", szPath);
//获取文件属性
if (!GetFileAttributesEx(szPath, GetFileExInfoStandard, &wfad)){
printf("获取文件属性错误: %d\n", GetLastError());
return 1;
}
printf("创建时间: ");
ShowFileTime(&(wfad.ftCreationTime));
printf("最后访问时间: ");
ShowFileTime(&(wfad.ftCreationTime));
printf("最后修改时间: ");
ShowFileTime(&(wfad.ftCreationTime));
ShowFileSize(wfad.nFileSizeHigh,wfad.nFileSizeLow);//文件大小
ShowFileAttrInfo(wfad.dwFileAttributes);//文件属性
return 0;
}