robinsnelson 发表于 2013-2-1 09:30:28

修改指定目录和子目录下的文件属性

// SetFileAttrib.cpp : Defines the entry point for the console application.// 我对工程的命名为SetFileAttrib,main函数的使用说明是按照这个来写的。#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;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;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;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)){printf("目录不存在\n");return -1;}SetFileAttrib(argv);return 0;}
页: [1]
查看完整版本: 修改指定目录和子目录下的文件属性