نسخ مجلد نحو مجل آخر
#1
السلام عليكم ورحمة الله وبركاته ،
كنت أبحث عن طريقة نسخ مجلد نحو مجلد آخر فوجد هذه الفكرة فأحببت أن أضعها لكم للتعم الفائدة .

كود :
function CopyFolder(FromFld, ToFld: string): boolean;
var fos: TSHFileopStruct;
begin
// il faut supprimer les antislashs de fin sinon vous aurez droit à un message d'erreur
// you must delete backSlsh
  FromFld := ExcludeTrailingPathDelimiter(Trim(FromFld));
  ToFld := ExcludeTrailingPathDelimiter(Trim(ToFld));

  FillChar(fos, SizeOf(fos),0);
  with fos do
  begin
    wFunc := FO_COPY;
    pFrom := PChar(FromFld+#0);
    pTo   := PChar(ToFld+#0);
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
  end;
  Result := ShFileOperation(fos)=0;
end;

كود :
if CopyFolder('d:\Folder01', 'c:\Folder2')then
     ShowMessage('Ok ')
  else
     ShowMessage('No');

طبعا لا تنس إضافة ShellAPI لقائمة Uses .


الملفات المرفقة
.rar   CopyFolder.rar (الحجم : 70.73 ك ب / التحميلات : 856)
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#2
بارك الله فيك وجزاك الله خير
احب اضيف تعديل بسيط لمن اراد ان ينسخ ما بداخل المجلد من ملفات دون نسخ كامل المجلد.

ليصبح الكود:

كود :
if CopyFolder('D:\CopyFolder\11\*.*', 'D:\CopyFolder\1')then
     ShowMessage('Ok ')
  else
     ShowMessage('No');
end;

فقط قم باضافة ((\*.* )) بعد المجلد الهدف
الرد
#3
طريقة أسهل بكثير

كود :
TDirectory.Delete(Path,true);

حيث Path مسار المجلد و True يدل على الحدف التراجعي لجميع المجلدات المحتوات فيه بما فيها الملفات

يجب إستدعاء IOUtils
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم