请问大家vc++中如何实现复制文件夹操作?

lj22 2006-08-31 05:07:57
大家帮帮忙,小弟刚学不久,VC++中如何实现对某一文件夹中的部分文件(可能包括文件夹)复制到别一个文件夹中,小弟在此先谢过了.
...全文
2371 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chrython 2006-09-25
  • 打赏
  • 举报
回复
Visual Studio 2005 的写法有些不同,我测试过,如下:

wchar_t * szSourcePath = _T("J:\\testFrom\\*.*\0");
wchar_t * szDestinationPath = _T("J:\\testTo\\\0");

SHFILEOPSTRUCT FileOP; //SHFILEOPSTRUCT声明
ZeroMemory(&FileOP, sizeof(FileOP));

//SHFILEOPSTRUCT成员赋值
FileOP.hwnd = AfxGetApp()->m_pMainWnd->m_hWnd;
FileOP.fFlags = FOF_SILENT;
FileOP.wFunc = FO_COPY;
FileOP.pFrom = szSourcePath;
FileOP.pTo = szDestinationPath;
FileOP.fAnyOperationsAborted = FALSE; //
FileOP.hNameMappings = NULL;
FileOP.lpszProgressTitle = NULL;
//SHFILEOPSTRUCT成员赋值结束

int msg = SHFileOperation(&FileOP);//执行复制操作

if(msg==0)
AfxMessageBox(_T("复制完成"));

else
AfxMessageBox(_T("复制失败!!!"));
一剑 2006-08-31
  • 打赏
  • 举报
回复
递归的方法:

CopyFolderAllFiles(CString csSourceFolder, CString csNewFolder)
{
CFileFind f;
BOOL bFind=f.FindFile(csSourceFolder+"\\*.*");
while(bFind)
{
bFind = f.FindNextFile();
TRACE(_T("%s\r\n"),f.GetFileName());

if(f.IsDots()) continue;
if(f.IsDirectory())
{
_mkdir(csNewFolder+"\\"+f.GetFileName());
CopyFolderAllFiles(csSourceFolder+"\\"+f.GetFileName(),csNewFolder+"\\"+f.GetFileName());
}
::SetFileAttributes(csSourceFolder+"\\"+f.GetFileName(),FILE_ATTRIBUTE_NORMAL);
::AfxGetApp()->DoWaitCursor(1);
::CopyFile(csSourceFolder+"\\"+f.GetFileName(),csNewFolder+"\\"+f.GetFileName(),FALSE);
::AfxGetApp()->DoWaitCursor(-1);

}
}
一剑 2006-08-31
  • 打赏
  • 举报
回复
void CUpDateApp::UpDateProgram()
{
SHFILEOPSTRUCT sfo;
char szSrcDir[256]="DK1\0AtmFep\0SetAtm\0WINNT\0";
char szTrgDir[256]="C:\0";
sfo.hwnd=AfxGetApp()->m_pMainWnd->m_hWnd;
sfo.wFunc=FO_COPY;
sfo.pFrom=szSrcDir;
sfo.pTo=szTrgDir;
sfo.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI;
sfo.lpszProgressTitle="更新程序";
SHFileOperation(&sfo);
}
zhihong123 2006-08-31
  • 打赏
  • 举报
回复
上面是文件夹的复制,如果是只复制文件的话,
CString StrSourceFile="C:\\Windows\\win.ini";
CString StrDestFile="C:\\win.ini";
if(::CopyFile(StrSourceFile,StrDestFile,FALSE))
MessageBox("复制文件操作成功","信息提示",MB_OK);
else
MessageBox("复制文件操作失败,请检查源文件或目标文件夹是否存在?","信息提示",MB_OK);
zhihong123 2006-08-31
  • 打赏
  • 举报
回复
用SHFileOperationg()可以,
CString StrSourceFolder="C:\\Windows\\Fonts";
CString StrDestFolder="D:\\";
char SourceFolder[MAX_PATH+1]="";
strcpy(SourceFolder,StrSourceFolder);
char TargetFolder[MAX_PATH+1]="";
strcpy(TargetFolder,StrDestFolder);
SHFILEOPSTRUCT lpFile;
lpFile.hwnd=GetSafeHwnd();
lpFile.wFunc=FO_COPY;
lpFile.pFrom=SourceFolder;
lpFile.pTo=TargetFolder;
lpFile.fFlags=FOF_ALLOWUNDO;
lpFile.fAnyOperationsAborted=FALSE;
lpFile.hNameMappings=NULL;
lpFile.lpszProgressTitle=NULL;
int ReturnValue=SHFileOperation(&lpFile);
if(ReturnValue==0)
{
if(lpFile.fAnyOperationsAborted==TRUE)
MessageBox("复制文件夹的操作被取消","信息提示",MB_OK+MB_ICONWARNING);
else
MessageBox("复制文件夹操作成功","信息提示",MB_OK+MB_ICONWARNING);
}
else
MessageBox("复制文件夹操作失败","信息提示",MB_OK+MB_ICONEXCLAMATION);

你试试
lj22 2006-08-31
  • 打赏
  • 举报
回复
SoLike(思危):
谢谢你的好意,但我不能用这个方法实现,必须用VC++中的API
思危 2006-08-31
  • 打赏
  • 举报
回复
写错一点,抱歉
system("cmd.exe xcopy/e d:\\11\\*.* d:\\22");
思危 2006-08-31
  • 打赏
  • 举报
回复
是不是用的太简单? :)
思危 2006-08-31
  • 打赏
  • 举报
回复
给你个简单的方法, 把d盘11目录下所有东西复制到22下,包括目录

#include <process.h>

system("xcopy/e d:\\11\\*.* d:\\22")

如果你想只复制一部分,把*.*替换成你要复制的文件或目录即可。
lj22 2006-08-31
  • 打赏
  • 举报
回复
如果用cfilefind遍历,但是我要选择的部分文件也有包括文件夹呀
lj22 2006-08-31
  • 打赏
  • 举报
回复
各们兄弟,告诉我能否用copyfolder,要怎样用这个函数呀
一条晚起的虫 2006-08-31
  • 打赏
  • 举报
回复
对不起,没看到部分。
可能需要遍历文件,选择文件。
一条晚起的虫 2006-08-31
  • 打赏
  • 举报
回复
SHFileOperation //shell操作,简单些
thisisll 2006-08-31
  • 打赏
  • 举报
回复
一文件夹中的部分文件

"部分"
是不是有选择的复制??

可以用CFileFind遍历文件夹,来选择你要复制的文件,然后用楼上的函数就能复制了
snowbirdfly 2006-08-31
  • 打赏
  • 举报
回复
可以参考一下:
Retrieving and Changing File Attributes:
#include <windows.h>
#include <stdio.h>

WIN32_FIND_DATA FileData;
HANDLE hSearch;
DWORD dwAttrs;
char szDirPath[] = "c:\\TEXTRO\\";
char szNewPath[MAX_PATH];
char szHome[MAX_PATH];

BOOL fFinished = FALSE;

// Create a new directory.

if (!CreateDirectory(szDirPath, NULL))
{
printf("Couldn't create new directory.");
return;
}

// Start searching for .TXT files in the current directory.

hSearch = FindFirstFile("*.txt", &FileData);
if (hSearch == INVALID_HANDLE_VALUE)
{
printf("No .TXT files found.");
return;
}

// Copy each .TXT file to the new directory
// and change it to read only, if not already.

while (!fFinished)
{
lstrcpy(szNewPath, szDirPath);
lstrcat(szNewPath, FileData.cFileName);
if (CopyFile(FileData.cFileName, szNewPath, FALSE))
{
dwAttrs = GetFileAttributes(FileData.cFileName);
if (!(dwAttrs & FILE_ATTRIBUTE_READONLY))
{
SetFileAttributes(szNewPath,
dwAttrs | FILE_ATTRIBUTE_READONLY);
}
}
else
{
printf("Couldn't copy file.");
return;
}

if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
MessageBox(hwnd, "No more .TXT files.",
"Search completed.", MB_OK);
fFinished = TRUE;
}
else
{
printf("Couldn't find next file.");
return;
}
}
}

// Close the search handle.

FindClose(hSearch);

snowbirdfly 2006-08-31
  • 打赏
  • 举报
回复
那使用CopyFile
或者是CopyFileEx
第5章 文件系统 5.1 文件的基本操作 实例173 创建和删除文件夹 实例174 把文件删除到回收站 实例175 清空回收站 实例176 强制删除文件 5.2 查找文件 实例177 搜索文件 实例178 使用多线程实现文件快速搜索 实例179 检查文件是否存在 实例180 提取指定文件夹目录到INI文件 5.3 与文件目录相关的命令操作 实例181 删除文件目录 实例182 重命名文件目录 5.4 文件、文件夹复制和移动 实例183 批量移动文件 实例184 网络文件夹复制 实例185 文件复制过程显示进度条 5.5 文件修改 实例186 修改应用程序图标 实例187 更改文件夹图标 实例188 批量删除指定类型的文件 实例189 批量重命名文件 实例190 修改文件属性 实例191 修改文件及目录的名称 5.6 文件的读取与保存 实例192 顺序读取文件 实例193 制作日志文件 实例194 获取Word文档属性 实例195 将Word转换为HTML 实例196 提取Word文档目录 5.7 文件管理 实例197 分类整理磁盘文件 实例198 计算机磁盘空间报警程序 实例199 批量改变指定文件的属性 5.8 加密与解密 实例200 文件的加密与解密 实例201 文件夹加密 5.9 INI文件 实例202 向INI文件写入数据 实例203 使用INI文件保存配置信息 5.10 其他 实例204 文件分割器 实例205 用WinRar压缩和解压文件 实例206 捆绑可执行文件 实例207 读写XML文件

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧