بسم الله الرحمن الرحيم
منذ فترة كتبت برنامج يقوم ياستنساخ الملفات الصغيرة وفق الخوارزمية التالية
يقرأ الملف المطلوب استنساخه .. ويخزن قيم الآسكي للمحارف التي تكون الملف ويحتفظ بها داخل ملف جديد هو عبارة عن كود جاهز للترجمة
وعند ترجمة الكود الناتج عن البرنامج سينتج لنا مولد للملف النسخة عندما نشغله سينشئ الملف النسخة المتوحشة :blink:
أود أن أنوه إلى أنني أضع الكود بين يديكم مع الشرح ... حيث أنه لا يكون الكود مصدراً مفتوحا بلا شرح
وأرجو بهذاالشرح فضل الله اولاً ... ثم أعتذر من الأستاذ محمد علاء الدين والأخ حسام حيث ناقشتهم بطريقة غبية في مشاركتي السابقة ... مشاركة مستنسخة
أترككم مع الكود والشرح والسلام عليكم
#include<fstream.h>//تضمين مكتبة التعامل مع الملفات
#include<iostream.h>//مكتبة الدخل والخرج
#include<windows.h>//مكتبة التعامل مع الويندوز...
#include<string.h>//مكتبة التعامل مع السلاسل المحرفية
void main()//الدالة الرئيسية
{
cout<<"Enter The Source File Name(With its Form) : ";//طلب من المستخدم إدخال اسم الملف المراد استنساخه
char Source[30];//الحجم الأعظمي للاسم 30 حرف ويمكن تغييره
cin>>Source;//ادخال الاسم .. وطبعاً سيبقى هناك خانات غير مستعملة في المصفوفة
char* Src=new char [strlen(Source)];//انشاء مصفوفة جديدة بحجم الاسم تماماً منعاً لأي خطأ لا حقا
strcpy(Src,Source);//نسخ الاسم إلى المصفوفة الجديدة
ifstream in(Src,ios::binary);//إنشاء كائن الإدخال من الملف
for(int Size=0;!in.eof();Size++)//من أجل كل محتويات الملف
in.get();//نأخذ حرفاً
//الحلقة السابقة تقوم بعد أحرف الملف .... طريقة مبتكرة أليس كذلك
in.close();//إغلاق الملف لأن الرجوع إلى البداية بعد بلوغ نهاية الملف لم يعمل وأجهل السبب
cout<<"Please Enter The Result File Name : ";//الطلب من المستخدم أن يدخل اسم الملف الذي يريده ان ينتج عن عملية الاستنساخ
char Result_name[30];//مصفوفة الاسم
cin>>Result_name;//ادخال
//والآن ستبدأ الخوارزمية
ofstream out("Clone_Generator.cpp",ios::binary);//نفتح ملف للكتابة وهذا الملف عندما يترجم سيعطينا ملف تنفيذي عندما نشغله سيعطي المستنسخ
out <<"#include<fstream.h>\nvoid main()\n{\n"//هذا الكلام هنا سيكتب في الكود داخل الملف الذي أنشأناه للتو
<<"ofstream out(\""<<Result_name<<"\",ios::binary);\n"//لاحظ أخي كيف أننا الآن نكتب كود سيقوم بكتابة كود... ما رأيك
<<"const int Size ="<<Size<<";\n"
<<"short CL[Size]={";//فتحنا المصفوفة لنخزن القيم الآن
in.open(Src,ios::binary);//نفتح الملف الهدف
in.seekg(0);//نذهب للبداية
out<<(in.get());//سنخزن رقم الآسكي للحرف الأول في المصفوفة التي فتحنا قوسها قبل قليل
int buffer;//متحول مساعد
for(int i=1;!in.eof();i++)//والآن وحتى نهاية الملف
{
buffer=in.get();//نأخذ الحرف ونضعه في المخزن المساعد
if(buffer==-1)break;//إذا كان -1 فهو نهاية
else out<<','<<buffer;//سنضع فاصلة بعد كل عنصر
if(i%100==0)out<<endl;//كل 100 عنصر سننزل سطر حتى لا نضع كل المصفوفة في سطر واحد
}
out<<"};\nfor(int i=0;i<Size;i++)\nout<<char(CL);";//بعد انتهاء اسناد عناصر المصفوفة سنقوم بعمل حلقة كي تكتب حروف البرنامج أي أن هذه هي الحلقة التي ستنشئ الكائن المستنسخ
out<<'}';//نهاية البرنامج الضمني
out.close();//نهاية الكتابة
//انتهى البرنامج
}
void By_Mostafa_36a2(){
/* ما كان من خير فمن الله جل جلاله
وما كنا من تقصير فمني ... أستغفر الله العظيم
أخي القارئ... إذا كان هذا الشرح قد أفادك فلا تحرمني دعوة في ظهر الغيب جزاك الله خيراً
وأرجو أن نتعاون لسد أي خلل
والسلام عليكم*/
};