程序的主要目的就是将一个文件夹移动, 采用递归算法,毛病就是要移动的文件夹内部的文件和文件夹可以删除,但这个根文件夹却不能删除,我知道,删除之前应调用
FindClose(hFind)//HANDLE hFind = FindFirstFile("..")
哎!就是不知道错在哪里?请高手赐教!!
void CMyTreeView::MoveDirectory(CString strSource, CString strDest)
{
int pos = strSource.ReverseFind('\\');
CString strTemp, strSourceTemp;
strTemp = strDest + "\\" + strSource.Mid(pos + 1);
CreateDirectory(strTemp.LockBuffer(), NULL);
WIN32_FIND_DATA wfd;
strSourceTemp = strSource + "\\*.*";
HANDLE hFind = FindFirstFile(strSourceTemp.LockBuffer(), &wfd);
if(hFind == INVALID_HANDLE_VALUE)
{
::FindClose(hFind);
return;
}
CString strTempSource;
CString strTempDest;
while(FindNextFile(hFind, &wfd))
{
if( strcmp(wfd.cFileName, ".") != 0 &&
strcmp(wfd.cFileName, "..") != 0)
{
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
MoveDirectory(strSource + "\\"
+ wfd.cFileName, strTemp);
}
else if(strcmp(wfd.cFileName, "..") != 0)
{
strTempSource = strSource + "\\" +wfd.cFileName;
strTempDest = strTemp + "\\" + wfd.cFileName;
HANDLE hFile = CreateFile(strTempDest.LockBuffer(),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|
FILE_SHARE_WRITE,
NULL, CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, "Error Create File",
MB_ICONERROR);
break;
}
if(!CopyFile(strTempSource.LockBuffer(),
strTempDest.LockBuffer(), FALSE))
MessageBox(NULL, strTempDest.LockBuffer(),
MB_ICONERROR);
if(!DeleteFile(strTempSource.LockBuffer()))
MessageBox(NULL,
strTempSource.LockBuffer(),
MB_ICONERROR);
}
}
}
::FindClose(hFind);
if(!RemoveDirectory(strSource.LockBuffer()))
{
DWORD dw = GetLastError(); //dw == 32
MessageBox(NULL, strSource, MB_OK);
}
}我的信箱:[email protected]
FindClose(hFind)//HANDLE hFind = FindFirstFile("..")
哎!就是不知道错在哪里?请高手赐教!!
void CMyTreeView::MoveDirectory(CString strSource, CString strDest)
{
int pos = strSource.ReverseFind('\\');
CString strTemp, strSourceTemp;
strTemp = strDest + "\\" + strSource.Mid(pos + 1);
CreateDirectory(strTemp.LockBuffer(), NULL);
WIN32_FIND_DATA wfd;
strSourceTemp = strSource + "\\*.*";
HANDLE hFind = FindFirstFile(strSourceTemp.LockBuffer(), &wfd);
if(hFind == INVALID_HANDLE_VALUE)
{
::FindClose(hFind);
return;
}
CString strTempSource;
CString strTempDest;
while(FindNextFile(hFind, &wfd))
{
if( strcmp(wfd.cFileName, ".") != 0 &&
strcmp(wfd.cFileName, "..") != 0)
{
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
MoveDirectory(strSource + "\\"
+ wfd.cFileName, strTemp);
}
else if(strcmp(wfd.cFileName, "..") != 0)
{
strTempSource = strSource + "\\" +wfd.cFileName;
strTempDest = strTemp + "\\" + wfd.cFileName;
HANDLE hFile = CreateFile(strTempDest.LockBuffer(),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|
FILE_SHARE_WRITE,
NULL, CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, "Error Create File",
MB_ICONERROR);
break;
}
if(!CopyFile(strTempSource.LockBuffer(),
strTempDest.LockBuffer(), FALSE))
MessageBox(NULL, strTempDest.LockBuffer(),
MB_ICONERROR);
if(!DeleteFile(strTempSource.LockBuffer()))
MessageBox(NULL,
strTempSource.LockBuffer(),
MB_ICONERROR);
}
}
}
::FindClose(hFind);
if(!RemoveDirectory(strSource.LockBuffer()))
{
DWORD dw = GetLastError(); //dw == 32
MessageBox(NULL, strSource, MB_OK);
}
}我的信箱:[email protected]
解决方案 »
- vs2005 编译 下面这段代码出现内存泄漏,为什么在输出窗口看不到内存泄漏的文件名和行号呢? 请大虾指点
- 如何对控件的属性设值
- MFC中添加新类?
- float f1=1/3 f1是多少? int n1=1/3 是多少? 怎么解释?
- 如何调整TreeCtrl子项的顺序
- 不能用文本打开显示的文件,如何从中查找指定的字符串的位置!?
- SOS。一个极为困惑的问题,叩请大侠解决!!!
- 如何让我们的程序有生成exe文件的功能?
- MFC的对话框程序"Advanced frame menu items show/activate panes"是做什么的?
- 任务栏嵌入窗体
- 请问,如果想用VC做工业控制方面的程序,怎么一来学习。从什么开始着手呢?要学些什么知识
- 如何查到某个汉字的unicode码值?
SHFILEOPSTRUCT op={0};
op.wFunc = FO_MOVE;//FO_RENAME;//FO_DELETE;
op.pFrom = "d:\\Xls2Txt";
op.pTo = "c:\\Xls2Txt";
op.fFlags = FOF_SILENT|FOF_NOCONFIRMATION|FOF_ALLOWUNDO;
SHFileOperation(&op);