الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نسخ مجلد بالملفات التي يحويها وهي ق ب برمجيا

بدأه مراد23 في 15 سبتمبر 2010 · 11 رد · 2,416 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته من لا يشكر الناس لا يشكر الله .

فكرتي هي نسخ مجلد خاص بـ ق ب برادوكس بكل محتوياته موجود في نفس مسار البرنامج

أنسخه في مجلد أخر احتياطي في نفس مسار البرنامج

يقوم البرنامج بفحص في المجلد الاحتياطي أن لم يكن هناك مجلد يحمل اسم تاريخ اليوم يقوم بإنشائه ناسخا فيه مجلد ملفات قاعدة البيانات.

بعد البحث وجدت هذا الكود لكن لم أعرف كيف أستعمله

أرجو من الإخوة الكرام مساعدتي في فهم هذا الكود.

function CheckSlashDir(prstrDir: String): String;
begin
  if Length(prstrDir) = 0 then Exit;
  if prstrDir[Length(prstrDir)] <> '\' then Result := prstrDir + '\'
  else Result := prstrDir;
end;

Procedure TMainfrm.GetTotalFilesToCopy(SrcFolder: String; var aTotalFolder, aTotalFiles: LongInt);
var
  OverrightAll: Boolean;
  SR: TSearchRec;
begin
  {Make sure that trailing slash exists}
  SrcFolder := CheckSlashDir(SrcFolder);

  {Check if Src Folder & Dest Folder are valid}
  if not DirectoryExists(SrcFolder) then begin
    ShowMessage('Source folder is not valid, Please select a valid source folder');
    abort;
  end;

  try
    if FindFirst(SrcFolder + '*.*' , faAnyFile, SR) = 0 then begin
      repeat
        if (SR.Attr and faDirectory) = faDirectory then begin
          if (SR.Name <> '.') and (SR.Name <> '..') then begin
            Inc(TotalFolder);
            GetTotalFilesToCopy(SrcFolder + SR.Name, aTotalFolder, aTotalFiles);
          end;
        end else begin
            Inc(TotalFiles);
        end;
      until FindNext(sr) <> 0;
    end;
  finally
    FindClose(SR);
  end;
end;

Procedure TMainfrm.CopyFolders(SrcFolder, DestFolder: String);
var
  SR: TSearchRec;
begin
  {Make sure that trailing slash exists}
  SrcFolder := CheckSlashDir(SrcFolder);
  DestFolder := CheckSlashDir(DestFolder);

  {Check if Src Folder & Dest Folder are valid}
  if not DirectoryExists(SrcFolder) then begin
    ShowMessage('Source folder is not valid, Please select a valid source folder');
    abort;
  end;

  if not DirectoryExists(DestFolder) then begin
    ShowMessage('Destination folder is not valid, Please select a valid destination folder');
    abort;
  end;

  try
    if FindFirst(SrcFolder + '*.*' , faAnyFile, SR) = 0 then begin
      repeat
        if (SR.Attr and faDirectory) = faDirectory then begin
          if (SR.Name <> '.') and (SR.Name <> '..') then begin
            {here you can handle existing folders if needed}
            ForceDirectories(DestFolder + SR.Name);
            CopyFolders(SrcFolder + SR.Name, DestFolder + SR.Name);
          end;
        end else begin
          {here you can handle existing files if needed}
          CopyFile(pChar(SrcFolder + SR.Name), pChar(DestFolder + SR.Name), false);
          lblInfo.Caption := Format('Copying File %s to ', [SrcFolder + SR.Name, DestFolder + SR.Name]);
        end;
        Inc(CurrFileCount);
        ProgressBar.Position :=  Round((CurrFileCount * 100) / TotalFiles);
      until FindNext(sr) <> 0;
    end;
  finally
    FindClose(SR);
  end;
end;

procedure TMainfrm.btnSrcClick(Sender: TObject);
var
  Directory: string;
begin
  if not SelectDirectory('Please Select Source Directory', '', Directory) then exit;
  txtSource.text := Directory;

  {Get Total files and folder to copy, so we can make use of progressbar}
  TotalFolder := 0;
  TotalFiles  := 0;
  GetTotalFilesToCopy(txtSource.text, TotalFolder, TotalFiles);
  lblFIleCount.Caption := Format('Contains %d File(s), %d folder(s)', [TotalFiles, TotalFolder]);
end;

procedure TMainfrm.btnDestClick(Sender: TObject);
var
  Directory: string;
begin
  if not SelectDirectory('Please Select Destination Directory', '', Directory) then exit;
  txtDest.text := Directory;
end;

procedure TMainfrm.BitBtn1Click(Sender: TObject);
begin
  CurrFileCount := 0;
  CopyFolders(txtSource.text, txtDest.text);
  ShowMessage('Done');
end;

وأقدم شكري للجميع وبارك الله فيكم وحفظكم ورعاكم .

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#2

السلام عليكم

هذا الكود ينشيء المجلد ان لم يكن منشأ

uses ShellApi;

function CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(fromDir + #0);
    pTo    := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;

استخدامه

procedure TForm1.Button1Click(Sender: TObject);
begin
if CopyDir('d:\dl','F:\dl') then ShowMessage('اكتمل النسخ');
end;
#3

السلام عليكم ورحمة الله وبركاته من لا يشكر الناس لا يشكر الله .

شكر لك أخي العزيز hez124 على الإجابة كانت نعمة ما طلبت والمثال المرفق خير دليل على ذلك طبعا

قمت بالتعديل على المجلد بما يتناسب رغبتي

لكن فقط لحظت أن البرنامج المرفق إنه ينسخ مجلد باسم تاريخ اليوم فيه الملفات المطلوبة

ثم عند إعادة نفس الأمر مجددا ينسخ مجلد أخر بنفس اسم المجلد المنسوخ بملفاته داخل المجلد المسمى بتاريخ اليوم الحالي

شاهد المثال المرفق.

شيء أخر أريد تبسيط البرنامج حتى يصبح منزوع من أي ظهور لصناديق الحوار

سواء من نظام التشغيل وندوز أو شو ميساج

الشرط هو إذا وجد المجلد باسم تاريخ اليوم موجود لا ينسخ مجلد قواعد البيانات

و إذا لم يجده ينسخ المجلد بكافة محتوياته باسم تاريخ اليوم الحالي دون أي رسائل حوار.

أكرر لك أخي العزيز شكري لك وللجميع .

ما أحلى ان ناخذ العلم عن عارف.

المثال التطبيقي:

CopyRepertoire.rar

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#4

السلام عليكم

ربما يفيدك هذا التغيير

بالتوفيق

12.rar

إعجاب الإنسان بنفسه دليل على صغر عقله

-----------------------------------------------------------------

رأس الحكمة مخافة الله

#5

السلام عليكم ورحمة الله وبركاته من لا يشكر الناس لا يشكر الله .

بارك الله فيك أخي العزيز 'maosalah

لا يشقى من كان معلميه متمكنيين

لقد كان المثال المرفق ردا شامل لكل جوانب فكرتي المرجوة

كما لا يفوتني أن أشكر الجميع .

تعقيب :

عندما يكون البرنامج في مرحلة التجريب تحتاج لعمل نسخة احتياطية لقواعد

البيانات تحسبا لكل خطأ يظهر في البرنامج

لذلك فكرة حفظ ق ب في مجلد يحمل اسم تاريخ اليوم

يساعدك في عدم فشل البرنامج مع أول أداء له غير محتسب.

تصحح الخطأ الموجود في البرنامج ثم تحمل أخر قاعدة بيانات حسب التاريخ المراد وبذلك

تهون على المستخدم اعادة ادخال عدد كبير من البيانات الشاقة.

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#6
مراد23 كتب:

السلام عليكم ورحمة الله وبركاته من لا يشكر الناس لا يشكر الله .

تعقيب :

تصحح الخطأ الموجود في البرنامج ثم تحمل أخر قاعدة بيانات حسب التاريخ المراد وبذلك

تهون على المستخدم اعادة ادخال عدد كبير من البيانات الشاقة.

اخي السلام عليكم

لمذا لا تستخدم نسخ الملف بمكان انت تحدده والملف يحمل

اسم(نوع النسخه+رمز المشغل+تاريخ اليوم+عددمرات الدخول+قبل او بعد)

مثللا(daly-9487-17092010-1.bfr)

ويمكن نسخه ببداية الدخول (*.bfr)للبرنامج او عند الخروج(*.afr) او كليهما وفيى بداية اليوم التالي

سيحذف البرنامج كافة النسخ المكرره اي المرقمه تلقائيا ليوم امس ويبقي على

اخر نسخه امس وستبقى معك هذه النسخه حتى يحذفها يدويا مالك البرنامج

وهنا يمكنك عمل نسخه يوميهdaly اسبوعيهwkly شهريه mhlyسنويه yrlyبتغيير مقدمة اسم النسخه

اذا اعجبتك الفكره اشر الى ووضح ما تريد منها وازودك بالتفاصيل ثم عدل كما تريد

تم تعديل هذه المشاركة بواسطة shalwan في 17 سبتمبر 2010 في 20:53

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#7
shalwan كتب:

اخي السلام عليكم

لمذا لا تستخدم نسخ الملف بمكان انت تحدده والملف يحمل

اسم(نوع النسخه+رمز المشغل+تاريخ اليوم+عددمرات الدخول+قبل او بعد)

مثللا(daly-9487-17092010-1.bfr)

ويمكن نسخه ببداية الدخول (*.bfr)للبرنامج او عند الخروج(*.afr) او كليهما وفيى بداية اليوم التالي

سيحذف البرنامج كافة النسخ المكرره اي المرقمه تلقائيا ليوم امس ويبقي على

اخر نسخه امس وستبقى معك هذه النسخه حتى يحذفها يدويا مالك البرنامج

وهنا يمكنك عمل نسخه يوميهdaly اسبوعيهwkly شهريه mhlyسنويه yrlyبتغيير مقدمة اسم النسخه

اذا اعجبتك الفكره اشر الى ووضح ما تريد منها وازودك بالتفاصيل ثم عدل كما تريد

السلام عليكم ورحمة الله تعالى وبركاته

اخواني الأعزاء

لدي فكرة واتمنى ان لم تكون مناسبة لكم فانا بحاجة الى ترسيخها

قبل الفكرة

الموضوع لابأس به وفي غاية الأهمية شكرًا لصاحبه ولمن ساعده على تخطي الأخطاء او تزويده بالأفكار

الفكرة هي اذا كان نسخ قاعدة البيانات 'بإسمها +تاريخ اليوم في مجلد بالبرنامج وليكن اسم المجلد Archive

ربما يكون افضل ولنفرض أن قاعدة البيانات إسمها total.db

فيجب ان تحفظ بإسم Total18092010.db

ويبقى طريقة استرجاعها في حالة الضرورة الى داخل البرنامج مع وضع رسالة تخبرك بأن إسم قاعدة البيانات هذه موجود هل تريد إستبداله

في هذه الحالة الإختيار يعود لمستعمل البرنامج

هذا ما اتمناه

وجزاكم الله عنا كل خير

تم تعديل هذه المشاركة بواسطة medreg في 18 سبتمبر 2010 في 10:44

#8

شكرا لك أخي العزيز shalwan على هذه اللفتة الكريمة منك

إن الهدف الأساسي لهذا الموقع هو تعميم الفائدة على الجميع وهذا من خلال تطوير الأفكار بما يتناسب واحتياجات كل مشترك .

اقتراحك جيد وأظن أن الفكرة التي طرحتها جيدة ومكتملة الجوانب حبذا لو تطبقها لننتفع بها جميعا.

تعقيب : بالنسبة للأفكار حول حفظ قواعد البيانات فهي كثيرة.

فلو أردت مثلا لجعلت المستخدم يقوم هو بحفظ قاعدة البيانات يدويا

ينشئ مجلد ثم ينقل له القاعدة بواسطة نسخ لصق وينتهي الأمر.

لكن أظن هذا مخالف للعلاقة بين المبرمج والمستخدم

الواجهة للمستخدم أما خفايا البرمجة فهي للمبرمج

فعندما تجعل المستخدم هو الذي ينسخ ق ب يدويا فأنت تدله على مكانها

مما يقلل من هيبة وسحر البرنامج في عين المستخدم فلا يصبح يتعامل مع برنامجك بطريقة جدية كلها حذر

كلما كان المستخدم بعيد عن كواليس البرنامج كانت لديه الثقة أكثر به فلا يتجاسر على محاولة تصحيح الأخطاء من ذاته وانتم تعلمون بأن أي تغير في ق ب حتى ولو كان بسيط دون المرور ببرتوكولات البرنامج ممكن يسقط كل نظام ق ب لذلك يجب أن تكون كل إجراءات التغير تتم برمجيا .

فكرتي التي طرحتها أنا كانت خاصة ببرنامج شخص مبتدئ يجرب برنامجه أو بالأحرى يجرب نفسه في البرمجة. فحاولت أن أبعد المستخدم عن ق ب وفي نفس الوقت تكون لدي نسخة احتياطية لقاعدة البيانات تبعد مسافة يوم فقط.

لكن بالنسبة للبرامج المحترفة فالأمر يختلف يجب أن يكون هناك أكثر من نسخة احتياطية للبرنامج خلال فترات مختلفة (فتح – إغلاق البرنامج مثلا ... الخ)

كما أن استرجاع ق ب الاحتياطية أو تغيرها لبد أن يكون برمجيا كذلك عملية حفظها وهذا ما يتناسب وفكرة التي اقترحها الأخ العزيز medreg

لذلك من لديه فكرة احترافية مشروحة لحفظ نسخ احتياطية لـ ق ب يضعها وأجره على الله.

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#9
مراد23 كتب:

شكرا لك أخي العزيز shalwan على هذه اللفتة الكريمة منك

اقتراحك جيد وأظن أن الفكرة التي طرحتها جيدة ومكتملة الجوانب حبذا لو تطبقها لننتفع بها جميعا.

السلام عليكم ورحمة الله وبركاته

لقد ارفقت برنامج مفتوح على الدولفي 6 واذا خفيت عليك معلومه اطرح السؤال بهذا المكان ليسهل ويتضح للآخرين

مع العلم بأنك اذا احتجت استعادة نسخة الأمان فاذهب الى الموقع الذي نسخت به وعدل اسمها ليماثل قاعدة البيانات السابقه وانسخها فوقها

تحياتي للجميع

دعواتكم لوالدينا

MORAD.zip

تم تعديل هذه المشاركة بواسطة shalwan في 23 سبتمبر 2010 في 23:55

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#10
اقتباس
السلام عليكم ورحمة الله وبركاته

لقد ارفقت برنامج مفتوح على الدولفي 6 واذا خفيت عليك معلومه اطرح السؤال بهذا المكان ليسهل ويتضح للآخرين

مع العلم بأنك اذا احتجت استعادة نسخة الأمان فاذهب الى الموقع الذي نسخت به وعدل اسمها ليماثل قاعدة البيانات السابقه وانسخها فوقها

تحياتي للجميع دعواتكم لوالدينا.

السلام عليكم ورحمة الله وبركاته من لا يشكر الناس لا يشكر الله .

أخي العزيز shalwan أعز الله وحفظك ورعاك وجزاك عنا موفور الأجر والثوب لقد هزني وأسعدني كثير وقوفك عند رغبتي ووضعك للمثال جبر الله خاطرك .

أدعو الله أن يغفر لك ولوالديك وأن يجعل جنة الفردوس مقامكم جميعا أمين يا رب العالمين.

واضح أن المثال المرفق معمول بطريقة احترافية لكن كوني مبتدئ فهناك غموض بالنسبة لي.

أنا لحد الآن لم أتعامل إلا مع ق ب من نوع بارد وكس طبعا موجودة في مجلد باسم Donnees في نفس مسار البرنامج.

1- ما هو نوع الملف XXX.BLL الذي تقوم بحفظ نسخة منه

2- ما هو نوع الملف الذي امتدادها هذا BLL.

3- لم أفهم كيف أسترجع نسخة الأمان في المثال يدويا أو برمجيا.

4- ما هو نوع الامتداد للملفات التي تحفظها

DALY-MORAD4-09201026-S001.AFT

DALY-MORAD4-09201026-SSSS.AFT

5- كيف يتم حذف النسخ غير المرغوب بها برمجيا

6- هل ق ب ملف واحد أنا لدي مجموعة من الملفات موضوعة في مجلد Donnees .

7- هل تقوم بتحويل صيغة امتداد ملفات ق ب عند حفظ نسخة أمان منها إلى نوع أخر من الملفات ثم تعيدها عند عملية الاسترجاع إلى شكلها الطبيعي.

يجب الأخذ بعين الاعتبار أن ق ب التي أتعامل معها هي من نوع بارد وكس وعندي أكثر من جدول في مجلد Donnees.

1

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#11
مراد23 كتب:

أدعو الله أن يغفر لك ولوالديك وأن يجعل جنة الفردوس مقامكم جميعا أمين يا رب العالمين.

يجب الأخذ بعين الاعتبار أن ق ب التي أتعامل معها هي من نوع بارد وكس وعندي أكثر من جدول في مجلد Donnees.

1- <<<<<<<<نسخة منه (اسم مستعار وضعته وبالواقع يجب ان يكون الملف المطلوب نسخه)

2- <<<<<<<<امتدادها هذا BLL. (على اعتبار ان الملف يمثل قاعدة بيانات اكسس)

3- <<<<<<<<في المثال(مثلا نسخت ملف morad.db الى DALY-MORAD4-09201026-S001.AFT عدل المسمي الى morad.db فقط)

4- ما هو نوع الامتداد للملفات التي تحفظها

DALY-MORAD4-09201026-S001.AFT (نسخه يوميهDALY ـ لليوم 26 / 09 / 2010 م 09201026 ــ رقم واحد وتتسلسل كل جلسة عمل بنفس اليومS001 ـــ

بعد جلسة العمل AFT ) ـــ

DALY-MORAD4-09201026-SSSS.AFT (نسخه يوميهDALY ـ لليوم 26 / 09 / 2010 م 09201026 ــ الأساسيه وهي التي تبقى بعد حذف النسخ لليوم الماضي Ssss ـــ

بعد جلسة العمل AFT ) ــــ

5- <<<<<<<<وب بها برمجيا(اوضحت في edit1exit مع ملاحظة تطابق الأسماء والمتغيرات (ليبدأ من اخر جلسة عمل السابقه ثم يحسب

دوار اليا حتى يصل الى تاريخ الجلسه الحاليه ) ـــ

6- <<<<<<<<في مجلد Donnees .(انت فعلا بحاجه الى نسخ المجلد وليس الملف) ـــ

7- <<<<<<<<إلى شكلها الطبيعي.,,,,,,,,,,,صحيح

انا معك لنسخ ملفات ولكن لنسخ مجلد لا اعرفه ولكن حاول تطبيقه على فكرتي او افدني بما كيفية نسخ المجلد لأنني لا اعرفها

اذا حصلت على نتيجه افدني

حاول الأنتقال الى sql افضل او اكسس

تم تعديل هذه المشاركة بواسطة shalwan في 27 سبتمبر 2010 في 21:34

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#12
اقتباس
انا معك لنسخ ملفات ولكن لنسخ مجلد لا اعرفه ولكن حاول تطبيقه على فكرتي او افدني بما كيفية نسخ المجلد لأنني لا اعرفها

اذا حصلت على نتيجه افدني

السلام عليكم ورحمة الله وبركاته.

شكرا لك أخي العزيز shalwan بالنسبة لطريقة نسخ مجلد فالمثال الذي وضعه الاخ maosalah في هذه المشاركة جزاه الله كل خير جيد وفعال ويخدم تقريبا نفس الفكرة.

إذا أراد يمكنه أن يدعم المثال بطريقة استرجاع مجلد ق ب أليا حسب تاريخ اليوم المحفوظ اسمه به وهو مشكور.

shalwan بالنسبة لشرحك لمثالك لا يزال فيه غموض بالنسبة لي .

شكرا للجميع والله الموفق.

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…