遍历“受保护的操作系统文件”?
想用mfc写一个垃圾文件清理工具,需要遍历和访问“受保护的操作系统文件”,但是虽然能开打该文件夹,却遍历到错误的文件。代码如下:
CFileFind fileTemp;
bFind=fileTemp.FindFile(_T("C:\\Documents and Settings\\Administrator\\Local Settings\\Temporary Internet Files\\*.*")); //成功
int n=GetLastError();
while (bFind)
{
bFind=fileTemp.FindNextFile(); //得到的文件不是这个文件夹下的真实文件
if (!fileTemp.IsDots())
{
CString strPath=fileTemp.GetFilePath();
m_file.push_back(strPath);
}
}
fileTemp.Close();
Temporary Internet Files这个目录存放了很多IE的临时文件,包括.jpg,.htm类型,如果将“*.*”,改为“*.jpg”或其他的指定类型,则返回错误代码2。用API FindFirstFile()和FindNextFile()等测试了,也是同样的问题。有谁能解决吗?
[解决办法]
- C/C++ code
//参数1:路径:如"c:"//参数2:保存所有路径的链表//参数3:记录所有路径的字符串BOOL FindAllFiles(string strDirectory, list<string> &ml, string &strALL){ _finddata_t c_file; c_file.attrib =_MAX_PATH; string strTmpPath = strDirectory + "\\*.*"; intptr_t hFile = _findfirst(strTmpPath.c_str(), &c_file); if((HANDLE)hFile == INVALID_HANDLE_VALUE) //失败时就直接返回 { return TRUE; } do { if( c_file.attrib & _A_SUBDIR && string(c_file.name) != "." && string(c_file.name) != ".." && !(c_file.attrib & _A_SYSTEM) ) { FindAllFiles(strDirectory + "\\" + c_file.name, ml, strALL); } else { if(string(c_file.name) != "." && string(c_file.name) != "..") { if(c_file.size > 0) { ml.push_back(strDirectory + "\\" + c_file.name); strALL += strDirectory + "\\" + c_file.name + "\n"; } } } }while(_findnext(hFile, &c_file) == 0); _findclose(hFile); return TRUE;}
[解决办法]
GetFileAttributes()//读取一下文件属性,具体怎么用,你要查一下
SetFileAttributes()//设置一下文件的属性
我没写过类似楼主的程序,但是曾经写过遍历文件目录下所有子文件夹及文件目录下的指定类型文件的程序,
我用的是递归方法,楼主首先要应该判断一下文件的属性,是只读,还是可写,还是文件夹等等,如果当前有程序正在调用你要处理的这些文件,又该怎么办?这些都要考虑的。
我没做过楼主这样的程序,大胆说一下,先读取一下文件属性,如果是只读,尝试重新设置一下它的属性。
设置成功后,看看是否可以进行楼主的操作。