// SetFileAttrib.cpp : Defines the entry point for the console application.
// [b]我对工程的命名为SetFileAttrib,main函数的使用说明是按照这个来写的。[/b]
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")
void SetFileAttrib(const char* curdir)
{
// 遍历指定目录
WIN32_FIND_DATA wd;
char dir[MAX_PATH];
memset(dir, 0, MAX_PATH);
sprintf(dir, "%s\\*.*", curdir);
HANDLE hFind = FindFirstFile(dir, &wd);
if(INVALID_HANDLE_VALUE == hFind)
{
printf("GetLastError:%d\n", GetLastError());
return ;
}
do
{
if (wd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (0 == strcmp(wd.cFileName, ".")
|| 0 == strcmp(wd.cFileName, ".."))
{
// 点目录跳过
continue;
}
char szNewDir[MAX_PATH];
memset(szNewDir, 0, MAX_PATH);
sprintf(szNewDir, "%s\\%s", curdir, wd.cFileName);
if(FALSE == SetFileAttributes(szNewDir, FILE_ATTRIBUTE_NORMAL))
{
printf("修改目录属性失败,目录名:%s\n错误码:%d\n", szNewDir, GetLastError());
}
else
{
printf("修改目录属性成功:%s\n", szNewDir);
}
// 递归调用,修改子目录下的文件属性
SetFileAttrib(szNewDir);
// 上面已经设置过属性,这里跳过
continue;
}
char szFileName[MAX_PATH];
memset(szFileName, 0, MAX_PATH);
sprintf(szFileName, "%s\\%s", curdir, wd.cFileName);
if(FALSE == SetFileAttributes(szFileName, FILE_ATTRIBUTE_NORMAL))
{
printf("修改文件属性失败,文件名:%s\n错误码:%d\n", szFileName, GetLastError());
}
else
{
printf("修改文件属性成功:%s\n", szFileName);
}
} while (FindNextFile(hFind, &wd));
FindClose(hFind);
}
int main(int argc, char* argv[])
{
if (2 != argc)
{
printf(
"用法:\n"
"\tSetFileAttrib + 目录名\n"
"例如:\n"
"\tSetFileAttrib E:\n");
return 0;
}
if (FALSE == PathFileExists(argv[1]))
{
printf("目录不存在\n");
return -1;
}
SetFileAttrib(argv[1]);
return 0;
}
修改指定目录和子目录下的文件属性
最新推荐文章于 2023-04-29 20:12:29 发布