MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)
2011-07-30 17:49
501 查看
转载原文/article/1621591.html
上一篇博文中已经提到了CFileFind类,并且用它实现了删除任意文件夹,此处不再对其赘述。
在实现文件复制过程时,一个问题i是我纠结了许久,CFileFind 类的成员函数 GetFilePath()与GetFileName(),其实很好理解的两个函数,一个是获得文件的路径,一个是获得文件的名字。但我却在理解上犯了一个错误,就是文件路径究竟包不包含文件名字,如有文件C:/Test/1.txt ,那么它的路径和名称分别是什么?我理解成了,路径:C:/Test 名称1.txt ,我按照我的理解编写这个复制功能的实现代码,老师出错,最后我才发现,原来 路径是包含文件名称的 ,即上面的文件
路径即是:C:/Test/1.txt。
似乎是个很低级的错误,但是的确困扰了我一段时间。
回到正题。
具体的实现思想类似于上一篇博文“MFC 中 删除一个非空文件夹”
请看源代码:
view plaincopy to clipboardprint?
void myCopyDirectory(CString source, CString target)
{
CreateDirectory(target,NULL); //创建目标文件夹
//AfxMessageBox("创建文件夹"+target);
CFileFind finder;
CString path;
path.Format("%s/*.*",source);
AfxMessageBox(path);
bool bWorking = finder.FindFile(path);
while(bWorking){
bWorking = finder.FindNextFile();
AfxMessageBox(finder.GetFileName());
if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 ..
myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName()
}
else{ //是文件 则直接复制
//AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()
CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE);
}
}
}
void myCopyDirectory(CString source, CString target)
{
CreateDirectory(target,NULL); //创建目标文件夹
//AfxMessageBox("创建文件夹"+target);
CFileFind finder;
CString path;
path.Format("%s/*.*",source);
AfxMessageBox(path);
bool bWorking = finder.FindFile(path);
while(bWorking){
bWorking = finder.FindNextFile();
AfxMessageBox(finder.GetFileName());
if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 ..
myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName()
}
else{ //是文件 则直接复制
//AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()
CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE);
}
}
}
源代码不是很难理解,不再详解
上一篇博文中已经提到了CFileFind类,并且用它实现了删除任意文件夹,此处不再对其赘述。
在实现文件复制过程时,一个问题i是我纠结了许久,CFileFind 类的成员函数 GetFilePath()与GetFileName(),其实很好理解的两个函数,一个是获得文件的路径,一个是获得文件的名字。但我却在理解上犯了一个错误,就是文件路径究竟包不包含文件名字,如有文件C:/Test/1.txt ,那么它的路径和名称分别是什么?我理解成了,路径:C:/Test 名称1.txt ,我按照我的理解编写这个复制功能的实现代码,老师出错,最后我才发现,原来 路径是包含文件名称的 ,即上面的文件
路径即是:C:/Test/1.txt。
似乎是个很低级的错误,但是的确困扰了我一段时间。
回到正题。
具体的实现思想类似于上一篇博文“MFC 中 删除一个非空文件夹”
请看源代码:
view plaincopy to clipboardprint?
void myCopyDirectory(CString source, CString target)
{
CreateDirectory(target,NULL); //创建目标文件夹
//AfxMessageBox("创建文件夹"+target);
CFileFind finder;
CString path;
path.Format("%s/*.*",source);
AfxMessageBox(path);
bool bWorking = finder.FindFile(path);
while(bWorking){
bWorking = finder.FindNextFile();
AfxMessageBox(finder.GetFileName());
if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 ..
myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName()
}
else{ //是文件 则直接复制
//AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()
CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE);
}
}
}
void myCopyDirectory(CString source, CString target)
{
CreateDirectory(target,NULL); //创建目标文件夹
//AfxMessageBox("创建文件夹"+target);
CFileFind finder;
CString path;
path.Format("%s/*.*",source);
AfxMessageBox(path);
bool bWorking = finder.FindFile(path);
while(bWorking){
bWorking = finder.FindNextFile();
AfxMessageBox(finder.GetFileName());
if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 ..
myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName()
}
else{ //是文件 则直接复制
//AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()
CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE);
}
}
}
源代码不是很难理解,不再详解
相关文章推荐
- MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)
- MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)
- PHP 文件夹操作「复制、删除、查看大小」递归实现
- Shell脚本实现从文件夹中递归复制文件
- MFC下对文件及文件夹的操作(复制、剪切、删除、创建文件夹,写文件)
- java递归实现复制一个文件夹下所有文件的功能
- 使用java递归实现文件及文件夹的复制
- 转载:MFC文件/文件夹操作查找、复制、删除
- 利用递归和IO实现复制文件夹下所有文件和文件夹至目标文件夹
- PB利用API-SHFileOperation 文件操作函数 实现多文件及文件夹的删除复制等操作
- Shell脚本实现从文件夹中递归复制文件
- MFC实现递归遍历文件夹内的所有文件夹和文件
- 文件操作以及实现文件的复制操作并且在目的目录创建相应文件夹
- php(创建、删除、移动、复制)文件及文件夹操作的实现方法
- MFC下对文件及文件夹的操作(复制、剪切、删除、创建文件夹,写文件)
- Java笔记之io——递归创建与删除多层文件夹,字符流实现文件复制
- C#文件操作源码 递归复制一个目录 递归删除文件 和 文件夹
- C#文件操作源码 递归复制一个目录 递归删除文件 和 文件夹
- Qt(五)--- 文件操作以及实现文件的复制操作并且在目的目录创建相应文件夹
- PHP递归实现文件夹的复制、删除、查看大小操作示例