文件夹内容复制( 包含进度)

void __fastcall TForm_PrjPreView::BitBtnOKClick(TObject *Sender)
{
     String tempstr=ExtractFilePath(Application->ExeName);
     String ReturnName=Edit_PjoNewName->Text.Trim();
     String ProjectFile=tempstr+"Project\\"+ReturnName;
     LabelError->Visible=false;
     ProgressBarLoding->Visible=false;
     ProgressBarLoding->Position=0;
     LabelError->Caption="";
     if (DirectoryExists(ProjectFile))
     {
        LabelError->Visible=true;
        LabelError->Caption="此项目名称已经存在,请更换项目名称!" ;
        return ;
     }
     CreateDir(ProjectFile);
     String TemplateFile=tempstr+"Template\\"+UseTypeName+"\\"+UsePrjName;
     this->Enbaled=false;
     ProgressBarLoding->Visible=true;
     Application->ProcessMessages();
     int AllFileCount=0;
     int OnCopyCount=0;
     GetFileCount(AllFileCount,TemplateFile);
     ProgressBarLoding->Position=0;
     ProgressBarLoding->Max=AllFileCount;
     CopyAllFile(OnCopyCount,TemplateFile,ProjectFile);
     FormProjectMain->ProName=ReturnName;
     FormProjectMain->ModalResult=mrOk;
}
void __fastcall TForm_PrjPreView::GetFileCount(int &FlieConut,String FileName)
{
     HANDLE hFile = NULL;
     WIN32_FIND_DATA fd = {0};
     FileName+="\\*.*";
     hFile = ::FindFirstFile(FileName.c_str(), &fd);
     if(hFile != INVALID_HANDLE_VALUE)
     {
         do
         {
             bool temp=fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY;
             if(temp)
             {

                 if (AnsiString(fd.cFileName)==".")
                 {
                     continue;
                 }
                 if (AnsiString(fd.cFileName)=="..")
                 {
                     continue;
                 }
                 char UseFileName[500];
                 StrCopy(UseFileName,fd.cFileName);
                 String Parerntstr1=FileName+"\\"+AnsiString(fd.cFileName);
                 GetFileCount(FlieConut,Parerntstr1.c_str());

             }
             else
             {
                 FlieConut++;
             }
         }while(FindNextFile(hFile, &fd));
         FindClose(hFile);
         hFile = NULL;
     }
             
}
void __fastcall TForm_PrjPreView::CopyAllFile(int &FlieConut,String FileName,String DstFileName)
{
     HANDLE hFile = NULL;
     WIN32_FIND_DATA fd = {0};
     String UseFile=FileName+"\\*.*";
     hFile = ::FindFirstFile(UseFile.c_str(), &fd);
     if(hFile != INVALID_HANDLE_VALUE)
     {
         do
         {
             bool temp=fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY;
             if(temp)
             {

                 if (AnsiString(fd.cFileName)==".")
                 {
                     continue;
                 }
                 if (AnsiString(fd.cFileName)=="..")
                 {
                     continue;
                 }
                 char UseFileName[500];
                 StrCopy(UseFileName,fd.cFileName);
                 String Parerntstr1=FileName+"\\"+AnsiString(fd.cFileName);
                 String Parerntstr2=DstFileName+"\\"+AnsiString(fd.cFileName);
                 if (!DirectoryExists(Parerntstr2))
                 {
                      CreateDir(Parerntstr2);
                 }





                 CopyAllFile(FlieConut,Parerntstr1,Parerntstr2);

             }
             else
             {
                 String L_str=FileName+"\\"+AnsiString(fd.cFileName);
                 String D_str=DstFileName+"\\"+AnsiString(fd.cFileName);
                 CopyFile(L_str.c_str(),D_str.c_str(),false);
                 FlieConut++;
                 ProgressBarLoding->Position=FlieConut;
                 Application->ProcessMessages();
             }
         }while(FindNextFile(hFile, &fd));
         FindClose(hFile);
         hFile = NULL;
     }
             
}

工作中的一个项目用到的, 需要一个文件夹复制到另一个文件夹中。代码很简单就不写注释 了。包含递归调用。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值