با سلام
چطوری میشه یه فولدر رو با همه فایلهای داخلش کپی کرد ؟
مثلا از سی دی به هارد ؟؟؟؟
مرسی .
و اگر میشه توضیح بدین که انجام این عملیات رو چطور میشه با یک ProgressBar نشون بدیم .
بازم مرسی .
با سلام
چطوری میشه یه فولدر رو با همه فایلهای داخلش کپی کرد ؟
مثلا از سی دی به هارد ؟؟؟؟
مرسی .
و اگر میشه توضیح بدین که انجام این عملیات رو چطور میشه با یک ProgressBar نشون بدیم .
بازم مرسی .
با سلام
کد زیر خیلی راحت این کار را براتون انجام میده. در صورتی که تمایل به استفاده از چنین روشی نداشتید بفرمایید تا روش بعدی رو بنویسم که از طریق API هست و البته یک روش دیگر هم هست.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, FindFile, Filectrl, ShellApi, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
Button1: TButton;
Button2: TButton;
FindFile1: TFindFile;
Image1: TImage;
Image2: TImage;
ListBox1: TListBox;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 : TForm1;
Path,
Path2 : string;
implementation
{$R *.DFM}
procedure CopyRecursive(srcDir, dstDir: string);
var
cmd : string;
begin
cmd:='/c xcopy '+srcDir+' '+dstDir+' /E';
ShellExecute(Application.handle,'open','command',P Char(cmd),nil,SW_SHOW);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Salida : TextFile;
AppPath : string;
begin
AppPath := ExtractFilePath(Application.ExeName);
AssignFile(Salida,AppPath+'\'+'Copia.ini');
Rewrite(Salida);
Writeln(Salida,Path);
Writeln(Salida,Path2);
CloseFile(Salida);
Application.Terminate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if ((Path='') or (Path2='')) then
begin
ShowMessage('Error... No hay directorio Source/Target');
//no source directory
end
else
begin
Path := Edit1.Text;
Path2 := Edit2.Text;
if FileExists(Path2) then CopyRecursive(Path,Path2)
else
begin
MkDir(Path2);
CopyRecursive(Path,Path2);
end;
end;
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
Path := ExtractFilePath(Application.ExeName);
SelectDirectory(Path, [sdAllowCreate,sdPerformCreate,sdPrompt],1000);
FindFile1.Path := Path;
ListBox1.Items := FindFile1.SearchForFiles;
Form1.Edit1.text := Path;
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
Path2 := ExtractFilePath(Application.ExeName);
SelectDirectory(Path2, [sdAllowCreate,sdPerformCreate,sdPrompt],1000);
FindFile1.Path := Path2;
ListBox1.Items := FindFile1.SearchForFiles;
Form1.Edit2.text := Path2;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Entrada : TextFile;
AppPath : string;
InpSt,
OutSt : string;
begin
AppPath := ExtractFilePath(Application.ExeName);
if FileExists(AppPath+'\'+'Copia.ini') then
begin
AssignFile(Entrada, AppPath+'\'+'Copia.ini');
reset(Entrada);
readln(Entrada, InpSt);
readln(Entrada, OutSt);
Edit1.Text := InpSt;
Edit2.Text := OutSt;
Path := InpSt;
Path2 := OutSt;
CloseFile(Entrada);
end
else
begin
Edit1.Text := '';
Edit2.Text := '';
Path := '';
Path2 := '';
end;
end;
end.
این کد تست شده است.
شاد و پیروز باشید ...
سلام دوست عزیز
من فرمایشات جنابعالی رو فردا صبح امتحان میکنم .
از پاسخ شما متشکرم .
گلادیاتور :wink:
سلام
من این کد را تست کردم ولی جواب نداد
لطفا راهنمایی کنید که چطور مراحل کپی کردن فولدر را نمایش داد حالا یا با Progress یا همون کپی کردن در ویندوز
ممنون
دوست عزیز فکر کنم خیلی راحتتر باشد از دو تابع
CopyFile(فایل مبدا,فایل مقصد,آیا replace انجام شود یا نه);
MkDir(نام پوشه برای ساختن آن);
FileListBox1.Directory=MainFrm.exePath+Src;
FilesCount=FileListBox1.Count; برای پیدا کردن تعداد فایلها برای Max PrograssBar
داداش من با C++ Builder آنرا نوشتم راحت می تونی آنرا تغییر بدی
c_str معادل Pchar دلفی است
ProgressBar1->Max=FilesCount;
ProgressBar1->Min=0;
ProgressBar1->Position=0;
for (int i=0;i<FilesCount;i++)
{
FileListBox1->ItemIndex=i;
CopyFile(FileListBox1->FileName.c_str(),(Des+"\\"+FileListBo x1->Items->Strings[FileListBox1->ItemIndex]).c_str(),True);
ProgressBar1->Position=i+1;;
}
ممنون