SHFileOperation拷贝文件夹时路径的问题
函数如下
BOOL CopyFolder(LPCTSTR szDir,LPCTSTR szto)
{
SHFILEOPSTRUCT FileOp;
ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
FileOp.fFlags = FOF_NOCONFIRMATION;
FileOp.hNameMappings = NULL;
FileOp.hwnd = NULL;
FileOp.lpszProgressTitle = NULL;
FileOp.pFrom = szDir;
FileOp.pTo = szto;
FileOp.wFunc = FO_COPY;
return SHFileOperation(&FileOp) == 0;
}
当路径为相对路径时,不能操作长文件名,路径以"\0\0"结尾
当路径为绝对路径时,能适用长文件名,路径不能以"\0\0"结尾,好像只能有一个\0
以下是我试验的结果:我请问那两个加*号标注的一个成功,一个失败,有什么不同吗?
char szDir[]="Dir\\map\0\0";
char szto[]="\0\0";
//成功,但不能是长文件名
CString str="Dir\\map";
char* szDir=str.GetBuffer(str.GetLength()+2);
szDir[str.GetLength()]='\0';
szDir[str.GetLength()+1]='\0';
CString str1="";
char* szto=str1.GetBuffer(str1.GetLength()+2);
szto[str1.GetLength()]='\0';
szto[str1.GetLength()+1]='\0';
//成功,但不能是长文件名
CString str="e:\\Dir\\map"; //*****
char* szDir=str.GetBuffer(str.GetLength()+1);
CString str1="e:";
char* szto=str1.GetBuffer(str1.GetLength()+1);
//成功,可以是长文件名
CString str="E:\\Dir\\map";
char* szDir=str.GetBuffer(str.GetLength()+2);
szDir[str.GetLength()]='\0';
szDir[str.GetLength()+1]='\0';
CString str1="e:";
char* szto=str1.GetBuffer(str1.GetLength()+2);
szto[str1.GetLength()]='\0';
szto[str1.GetLength()+1]='\0';
//失败
CString str="E:\\Dir\\map"; //********
char* szDir=str.GetBuffer(str.GetLength()+1);
szDir[str.GetLength()]='\0';
CString str1="e:";
char* szto=str1.GetBuffer(str1.GetLength()+1);
szto[str1.GetLength()]='\0';
//失败
CString str="E:\\Dir\\map";
char* szDir=str.GetBuffer(str.GetLength());
CString str1="e:";
char* szto=str1.GetBuffer(str1.GetLength());
//失败