void CDelet eFile Dlg::OnDele te()
{
// TODO: Add your contro l notifi catio n handle r code here CStrin g strDir;
BROWSE INFOlpbi;
TCHARlpDir[MAX_PA TH];
CStrin g path("");
lpbi.hwndOw ner = this->m_hWnd;
lpbi.pidlRo ot = NULL; //
lpbi.pszDis playN ame = lpDir;
lpbi.lpszTi tle = _T("ÇëÑ¡ÔñÎļþ¼Ð£º");
lpbi.ulFlag s = BIF_RE TURNO NLYFS DIRS;
桌面上文件删不掉
lpbi.lpfn = NULL;
lpbi.lParam = NULL;
lpbi.iImage = NULL;
LPITEM IDLIS T lpidl= :: SHBrow seFor Folde r(&lpbi);
if(lpidl)
if (SHGetP athFr omIDL ist(lpidl, lpDir))
strDir = lpDir;
Delete Direc tory(lpDir);
}
bool CDelet eFile Dlg::Delete Direc tory(CStrin g strDir Path)
{
int iRet;
CFileF ind tempFi nd;
char tempFi leFin d[200];
if(strDir Path.GetAt(strDir Path.GetLen gth()-1) != '\\')
{
strDir Path+= "\\";
}
sprint f(tempFi leFin d,"%s*.*",(LPCTST R)strDir Path);
BOOL IsFind ed=(BOOL)tempFi nd.FindFi le(tempFi leFin d);
while(IsFind ed)
{
IsFind ed=(BOOL)tempFi nd.FindNe xtFil e();
if(!tempFi nd.IsDots())
{
char foundF ileNa me[200];
strcpy(foundF ileNa me,tempFi nd.GetFil eName().GetBuf fer(200));
if(tempFi nd.IsDire ctory())
{
char tempDi r[200];
sprint f(tempDi r,"%s%s",(LPCTST R)strDir Path,foundF ileNa me);
Delete Direc tory(tempDi r);
}
else
{
char tempFi leNam e[200];
sprint f(tempFi leNam e,"%s%s",(LPCTST R)strDir Path,foundF ileNa me); SetFil eAttr ibute s(tempFi leNam e,FILE_A TTRIB UTE_N ORMAL);
iRet = Delete File(tempFi leNam e);
if(!iRet)
{
int err = GetLas tErro r();
printf("error");
}
}
}
}
tempFi nd.Close();
if(!Remove Direc tory(strDir Path))
{
// Messag eBox(0,"ɾ³ýĿ¼ʧ°Ü£¡","¾¯¸æÐÅÏ¢",MK_OK);
return false;
}
return true;
}
1、SHBrow seFor Folde r
SHBrow seFor Folde r是一个可以用于获取文件夹路径的Wind ows API
LPITEM IDLIS T SHBrow seFor Folde r (LPBROW SEINF O lpbi);
2、SHGetP athFr omIDL ist
SHGetP athFr omIDL ist
功能是把项目标志符列表转换为文档系统路径:
BOOL SHGetP athFr omIDL ist(
LPCITE MIDLI ST pidl,
LPSTRpszPat h
);
参数:
pidl---相对 namesp ace 的根指定一个文档或目录地点的一张项目标识符表的地址( 桌面 ) ;
pszPat h---接收文档系统路径的缓冲地址,大小至少是M AX_PA TH的字符长度
3、CFileF ind
1、CFileF ind类的声明文件保存在afx.h头文件中。
2、该类的实现的功能:执行本地文件的查(查某个具体的文件,查某类文件x*.x*,查所有文件*.*)
3、CFileF ind类是CGoph erFil eFind和CFtp FileF ind类的基类。
4、CFileF ind类的构造函数::CFileF ind()和关闭函数::Close()我会成对使用。
5、CFileF ind类的成员函数我根据其操作特性划分为3类:查操作类、获得文件属性类、判断文件属性类。(下面我先进行函数罗列并没有完整的描述函数的参数)
查操作类
::FindFi le();
::FindNe xtFil e();
获得文件属性类
::GetCre ation Time();
::GetLas tAcce ssTim e();
::GetLas tWrit eTime();
::GetFil eName();
::GetRoo t();
::GetFil ePath();
::GetFil eTitl e();
::GetFil eURL();
::GetLen gth();
判断文件属性类
:
:IsArch ived();
::IsComp resse d();
::IsDire ctory();
::IsDots();
::IsHidd en();
::IsNorm al();
::IsRead Only();
::IsSyst em();
::IsTemp orary();
::Matche sMask();
6、CFileF ind类中成员函数使用应注意的顺序
在创建了CF ileFi nd对象后,先执行::FindFi le()函数,然后执行::FindNe xtFil e(),然后选择执行(获得文件属性类)的函数或者(判断文件属性类)函数。
7、CFileF ind类成员函数的详细分析
virtua l BOOL FindFi le(LPCTST R pstrNa me = null,DWORDdwUnus ed = 0);
该函数若返回非0 则表明执行成功,0 则表明执行不成功。
pstrNa me:需要查的文件名,例:“E:\\编程工具\\VC++\\MFC例子.rar”,“E:\\编程工具\\VC++\\MFC*.rar”,“E:\\编程工具\\VC++\\*.*”,也可以是NU LL表示“*.*”。dwUnus ed:必须为0
virtua l BOOL FindNe xtFil e();
该函数返回值非0 还有符合条件的文件,0表示是最后一个文件。
virtua l BOOL GetCre ation Time(FILETI ME *pFileT ime) const;
virtua l BOOL GetCre ation Time(CTime& refTim e) const;
该函数用来获得查到的某个文件的创建时间,返回值非0获得创建时间成功操作,0表示执行获得创建
时间失败或者F indNe xtFil e()没有被执行的时候。
FILETI ME *:容纳时间的结构指针
CTime&:容纳时间的对象地址
此处介绍:FILETI ME和CT ime相互转换的处理方法:
FILETI ME转CT ime的方法:
A、CTime对象在初始化时可以传递FILET IME结构
FILETI ME ft;
CTimetime(ft);
B、将FILET IME转换为SYST EMTIM E,然后CTim e对象在初始化时可以传递SYS TEMTI ME结构
FILETI ME ft;
SYSTEM TIMEst;
BOOL bSucce ss = ::FileTi meToS ystem Time(&ft , &st);
CTimetime(st);
CTime转FILET IME方法:
CTimetime(CTime::GetCur rentT ime());
SYSTEM TIMEst;
time.GetAsS ystem Time(st);
FILETI ME ft;
::System TimeT oFile Time(&st,&ft);
virtua l BOOL GetLas tAcce ssTim e(FILETI ME *pFileT ime) const;
virtua l BOOL GetLas tAcce ssTim e(CTime& refTim e) const;
该函数用来获得某个文件最后被访问的时间,非0表示执行成功,0表示执行失败或者Fi ndNex tFile()函数没有执行的时候。
virtua l BOOL GetLas tWrit eTime(FILETI ME *pFileT ime) const;
virtua l BOOL GetLas tWrit eTime(CTime& refTim e) const;
该函数用来获得某个文件最后被访问的时间,非0表示执行成功,0表示执行失败或者Fi ndNex tFile()函数没有执行的时候。
virtua l CStrin g GetFil ePath() const;
该函数用来获得查到的文件绝对路径,必须在执行了FindN extFi le()后该函数才能执行成功。
返回的结果是CStri ng对象,例“E:\\编程工具\\VC++\\MFC.rar”
virtua l CStrin g GetFil eName() const;
该函数用来获得查到的文件的全称,必须在执行了FindN extFi le()后该函数才能执行成功。
返回的结果是CStri ng对象,例“MFC.rar”
virtua l CStrin g GetFil eTitl e() const;
该函数用来获得查到的文件的名称,必须在执行了FindN extFi le()后该函数才能执行成功。
返回的结果是CStri ng对象,例“MFC”
virtua l CStrin g GetRoo t() const;
该函数用来获得查到的文件的根目录,必须在执行了FindN extFi le()后该函数才能执行成功。
返回的结果是CStri ng对象,例“E:\\编程工具\\VC++\\”
virtua l CStrin g GetFil eURL() const;
该函数用来获得查到的文件的UR L路径,必须在执行了FindN extFi le()后该函数才能执行成功。
返回的结果是CStri ng对象,例“file://E:\\编程工具\\VC++\\MFC.rar”
DWORDGetLen gth() const;
该函数返回值获得查到的文件的长度,必须在执行了FindN extFi le()后该函数才能执行成
发布评论