要隐藏文件,需要首先遍历文件夹及子文件,再调用SetFileAttributes(szFind, FILE_ATTRIBUTE_HIDDEN);将文件或文件夹隐藏
1、windows api版
find(char * lpPath)
{
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
return;
SetFileAttributes(szFind, FILE_ATTRIBUTE_HIDDEN);
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
SetFileAttributes(FindFileData.cFileName, FILE_ATTRIBUTE_HIDDEN);
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
2、mfc版
void HideFile(CString strFolder)
{
SetFileAttributes(strFolder, FILE_ATTRIBUTE_HIDDEN);
CFileFind tempFind;
BOOL bFound; //判断是否成功找到文件
bFound = tempFind.FindFile(strFolder + _T("\\*.*")); // 修改" "内内容给限定查找文件类型
CString strTmp; //如果找到的是文件夹存放文件夹路径
while (bFound) //遍历所有文件
{
bFound = tempFind.FindNextFile(); //第一次执行FindNextFile是选择到第一个文件,以后执行为选择
//到下一个文件
if (tempFind.IsDots()) //如果找到的是返回上层的目录 则结束本次查找
continue;
if (tempFind.IsDirectory()) //找到的是文件夹,则遍历该文件夹下的文件
{
strTmp = tempFind.GetFilePath();
HideFile(strTmp);
}
else
{
strTmp = tempFind.GetFilePath(); //保存文件名,包括后缀名
SetFileAttributes(strTmp, FILE_ATTRIBUTE_HIDDEN);
}
}
tempFind.Close();
}