اذهب إلى المحتوى

سعيد

الأعضاء
  • المساهمات

    96
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    6

كل منشورات العضو سعيد

  1. لم تذكر لغة البرمجة التي تستخدمها. ولكن يبدو أنّها سي شارب C#. أتصور أنّ مشكلتك في هذا السطر: dataGridView1.Rows[0].Cells[i].Value = file; الأداة datagridview التي تستخدمها لا تمتلك أيّ سطر بعد. علمًا أنّك تحاول إضافة الملفات إلى العمدة وليس إلى الأسطر. أتصوّر أنّ الكود التالي سيفي بالغرض: private void button1_Click(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { string path = folderBrowserDialog1.SelectedPath; string[] files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories); //reset all columns. dataGridView1.Columns.Clear(); //create a column first. dataGridView1.Columns.Add("colFile", "الملف"); foreach (string file in files) { dataGridView1.Rows.Add(file); } } } ينشئ الكود السابق عمودًا ضمن dataGridView1 ثمّ يعمل على إضافة الملفات التي حصل عليها على شكل أسطر ضمن هذا العمود. لاحظ أنّني قد حذفت جميع الأعمدة التي قد تكون قد أنشأتها من قبل باستخدام العبارة: dataGridView1.Columns.Clear();
  2. SELECT a.wdt_ID, a.item_type, a.selling_price, a.date_price FROM wpdatatable_21 a WHERE date_price IN (SELECT MAX(date_price) FROM wpdatatable_21 WHERE item_type=a.item_type ) and a.selling_price > 0 GROUP BY item_type هل أنت متأكد أنّ هذه التعليمة تعمل. أعتقد أنّها يجب ألّا تعمل!
  3. تستخدم كودًا خطرًا في هذا البرنامج! لا أدري لماذا تستخدم gets في حين انّه يمكنك استبدالها بسهولة بـ fgets مع تعديل بسيط على الوسائط الممرّرة لها. هذا بالإضافة إلى استخدامك للدالة close بدلًا من fclose، والقليل من الأخطاء الإملائية. على العموم جرّب البرنامج التالي: #include<stdlib.h> #include<stdio.h> struct etudiants{ int num; char nom[100]; char prenom[100]; char filier[50]; }; struct etudiants etud; /*---------fonction de chercher----*/ int rech(int numrech) { FILE*F; F=fopen("etudiants.txt","r"); do{ fscanf(F,"%d ; %s; %s; %s",&etud.num,etud.nom,etud.prenom,etud.filier); if (etud.num==numrech) { fclose(F); return 1; } } while(!feof(F)); fclose(F); return -1; } /*----ajoute---*/ void ajouteretudiant() { int numrech; FILE*F; F=fopen("etudiants.txt","a"); printf("\n entre le numero du nouveau etudiant:"); scanf("%d",&numrech); fflush(stdin); if (rech(numrech)== -1) { etud.num=numrech; printf("\n entre le nom :"); fgets(etud.nom,255,stdin); fflush(stdin); printf("\n entre le prenom :"); fgets(etud.prenom,255,stdin); fflush(stdin); printf("\n entre la filier :"); fgets(etud.filier,255,stdin); fflush(stdin); fprintf(F,"%d ;%s ;%s %s\n",etud.num,etud.nom,etud.prenom,etud.filier); fflush(stdin); } else { printf("\n cet etudiant exsiste deja"); } fclose(F); } /*---------recherche et affichage------*/ void recherche() { int numR; printf("entrer le numero d'etudiant a rechercher "); scanf("%d",&numR); FILE*F; F=fopen("etudiants.txt","r"); do{ fscanf(F,"%d;%s;%S;%s",&etud.num,etud.nom,etud.prenom,etud.filier); if(numR==etud.num){ printf("-----information dur le stagiaire:-------\n\n"); printf("numero : %d\n",etud.num); printf("nom : %s\n",etud.nom); printf("prenom : %s\n",etud.prenom); printf("filier : %s\n",etud.filier); } } while(!feof(F)); fclose(F); } /*------- suppression---*/ void supprimeretudiant() { char rep; int numrech; printf("entrez le numero d'etudiant a supprimer :"); scanf("%d",&numrech); fflush(stdin); if(rech(numrech)==1) { printf("\n volez vous vraimment supprimer o/n ?"); scanf("%c",&rep); fflush(stdin); if( rep=='o'|| rep=='O') { FILE*Fich,*F; F=fopen("etudiants.txt","r"); Fich=fopen("tempetudiant.txt","a"); do{ fscanf(F,"%d;%s;%s;%S",&etud.num,etud.nom,etud.prenom,etud.filier); if(numrech !=etud.num) { fprintf(Fich,"%d;%s;%s;%s \n\n",etud.num,etud.nom,etud.prenom,etud.filier); }} while(!feof(F)); fclose(F); remove("etudiants.txt"); rename("tempetudiant.txt","etudiants.txt"); printf("suppression effectue eve succees"); } } else{ printf("\n ce numero d'etudiant n'exsite pas"); } } /*--------procedure modifier etudiants-------*/ void modifieretudiant() { FILE*F,*Fich; int num,i; char rep; printf("\n entre le numero de l'etudiant a modifier :"); scanf("%d",&num); fflush(stdin); if(rech(num)==1) { printf("\n voulez vous vraimment modifier o/n ?"); scanf("%c",&rep); fflush(stdin); if(rep=='o'||rep=='O') { F=fopen("etudiants.txt","r"); Fich=fopen("tempetudiant.txt","a"); do{ fscanf(F,"%d;%s;%s;%s",&etud.num,etud.nom,etud.prenom,etud.filier); if(num==etud.num) { etud.num=num; printf("\n entre le nouveau nom :"); fgets(etud.nom, 255, stdin); printf("\n entre le nouveau prenom :"); fgets(etud.prenom,255, stdin); printf("entre le nouvelle filier :"); fgets(etud.filier,255,stdin); printf("\n la modification a reussi"); } fprintf(F,"%d;%s;%s;%s\n\n",etud.num,etud.nom,etud.prenom,etud.filier); } while(!feof(F)); fclose(F); fclose(Fich); remove("etudiants.txt"); rename("tempetudiant.txt" , "etudiants.txt"); } else{ printf("\n le modification a et annule \n"); } } /*else { printf("\n ce numero d'etudiant n'existe pas \n");*/ } /*-------procedure afficher--------*/ void affichertt() { FILE*F; F=fopen("etudiants.txt","r"); printf("la liste des etudiants est :\n\n"); do{ fscanf(F,"%d;%s;%s;%s",&etud.num,etud.nom,etud.prenom,etud.filier); fflush(stdin); printf("%d;%s;%s;%s\n\n",etud.num,etud.nom,etud.prenom,etud.filier); } while(!feof(F)); fclose(F); } /*-------menu principale----*/ int main(){ int choix; char rep; do{ system("cls"); printf("**********MENU*******\n"); printf("1-ajouter un etidiant \n"); printf("2-rechercher unetudiant\n"); printf("3-supprimer un etudiant\n"); printf("4-modifier un etudiant\n"); printf("affiche tous le etudiants\n"); printf("6-quitter\n\n"); do{ printf("\n -etre votre choix :"); scanf("%d",&choix); } while(choix<1 || choix>6); switch(choix) { case 1:ajouteretudiant; break; case 2:recherche(); break; case 3:supprimeretudiant(); break; case 4:modifieretudiant(); break; case 5:affichertt(); break; case 6:break; } printf("\n voulez-vous continuez o/n :"); scanf("%s",&rep); fflush(stdin); } while(rep=='o'||rep=='O');}
  4. هل من الممكن توضيح بنية الجدول wpdatatable_21 أي ذكر حقوله (مع أنواعها) ؟ أمر آخر. ما هي وظيفة هذه الأسطر في آخر حلقة while: $row->item_type; $row->date_price; $status; $row->selling_price;
  5. يرجى كتابة الشيفرة كاملة. أو ذكر رسالة الخطأ.
  6. الحقيقة هناك العديد من الأخطاء نتيجة التسرّع في إدخال الشيفرة وعدم الانتباه. بعد عدّة تعديلات أجريتها على برنامجك، البرنامج التالي تمّت ترجمته بنجاح: #include <stdio.h> #include <stdlib.h> #include <string.h> struct Employe { char nom[50] ; char prenon[50]; char fanction[50]; int salair[50]; char matricle[50]; } employe ; int main() { FILE *index; int i,n; char nomfichier[50]; Employe E; do { printf("entrez nom fichier\n"); scanf("%s",&nomfichier); index=fopen(nomfichier,"W"); if(!index) { printf("ereeur impossible \n"); } }while(!index); printf("entrez nombre employe \n"); scanf("%d",&n); for(i=0;i<n;i++) { printf("entrez nom employe \n"); scanf("%S",&E.nom); printf("entrez prenon \n"); scanf("%S",&E.prenon); printf("entrez nom fanction \n"); scanf("%S",&E.fanction); printf("entrez salair \n"); scanf("%d",&E.salair); printf("entrez matricle \n"); scanf("%S",&E.matricle); fprintf(index,"%s\n%s\n%s\n%s\n%d\n",&E.nom,&E.prenon,&E.fanction,&E.matricle,&E.salair); } fclose(index); system("pause"); } إذا أحببت أن تعرف أخطائك، قارن بين برنامجي وبرنامجك
  7. انظر هنا https://www.b4x.com/ ولكن أنصحك بشدة أن تتعلّم سي شارب وتستخدم Xamarin في تطوير تطبيقات جوال.
  8. من المستحيل أخي الكريم أن تختلط السجلات ضمن قاعدة البيانات مع بعضها ولو كانت قاعدة بيانات محليّة مثل Access. ربما يعاني برنامجك من مشاكل داخليّة تحدث بعد إضافة 400 سجل إلى قاعدة بيانات أكسس. إذا كنت تريد نصيحتي، شغّل برنامجك في طور التنصيح debugging mode ثمّ نفّذه خطوة بخطوة باستخدام التنفيذ الخطوي step in. وراقب ما يجري عندما تضيف السجل رقم 400 أو عندما تقرأ السجلات بعد أن يصبح عددها 400. كما ويمكنك استخدام برنامج Microsoft Access الذي يأتي ضمن حزمة أفيس لتفتح قاعدة البيانات ضمنه، وتراقب مالذي يحدث عند إضافة السجل رقم 399، وبعد إضافة السجل رقم 400، بينما تراقب ما يجري بنفس الوقت في البرنامج الذي وضعته في طور التقيح قبل قليل.
  9. إذا لم تكن مهتمًا بالتفاصيل فأنصحك بالشكل التالي الذي يسمح باستخدام الدالة max_element والتي تتطلّب وسيطين: الأوّل مؤشّر إلى العنصر الأوّل في المصفوفة المراد إيجاد القيمة الأكبر ضمنها، والوسيط الثاني هو مؤشّر العنصر الأخير من نفس المصفوفة. انظر إلى الشيفرة التالية: #include <iostream> #include <algorithm> int main() { int list[4] = {10, 40, 7, 8}; std::cout << *std::max_element(list, list+4); return 0; } الدالة max_element موجودة ضمن المكتبة algorithm.h. لاحظ أنّه يكفينا تمرير متغيّر المصفوفة list كوسيط أوّل للإشارة إلى العنصر الأوّل ضمنها، أمّا العنصر الأخير فهو العنصر الرّابع (في مثالنا هذا) ونحصل على مؤشّره بالصيغة التالية: list + 4 بعد تنيفذ البرنامج السابق، ستحصل في الخرج على القيمة 40. (لاحظ وجود الرمز * في السطر السادس قبل الاستدعاء إلى الدالة max_element). هذه الطريقة أسرع وأكثر فعاليّة، وخصوصًا في المصفوفات ذات عدد العناصر الكبير.
  10. يمكنك أيضًا مطالعة سلسلة تعلّم البرمجة باستخدام سي شارب هنا في أكاديميّة حسّوب، وهي سلسلة جديدة، يبدو أنّها تصدر تباعًا: تعلّم لغة C#
  11. هذا السلوك طبيعي. لأنّك عندئذٍ تمرّر المتغيّر a$ بالقيمة (بدون الرمز &) وليست بالمرجع. ففي هذه الحالة ستمرّر نسخة عن قيمة a$ وهي 3 إلى الدالة doSomething التي ستعدّل هذه القيمة ضمنها ولكن لن يؤثّر ذلك على قيمة a$ الأصلية أبدًا في هذه الحالة. انس الآن المتغيّر b$.
  12. يعني ذلك أنّك تمرّر المتغيّر بالمرجع أي تمرّر عنوانه وليس قيمته. في البرنامج السابق، أسندت القيمة 3 للمتغيّر a$ ثم مرّرته بالمرجع إلى الدالة doSomething، فأصبح كل من المتغيرين arg$ و a$ يشيران إلى نفس القيمة. ضمن الدالة doSomething أسندنا قيمة arg$ إلى المتغيّر return$ ثم زدنا قيمة arg$ بمقدار واحد: $arg+=1; فأصبح كل من arg$ و a$ يحمل القيمة 4 ثم أعادت الدالة القيمة الأصلية للمتغيّر a$ (قبل الزيادة) والتي خزنّاها ضمن المتغيّر return$ وذلك عن طريق العبارة: return $return; ستخزّن القيمة المُعادة ضمن المتغيّر b$ الذي ستكون قيمته في هذه الحالة 3، وتصبح قيمة a$ تساوي 4.
  13. يبدو أنّ بعض بارامترات الإستعلام تتطلّب أنواع بيانات مختلفة عن تلك التي تمرريها. عليك الانتباه إلى أنواع البارامترات المعرّفة في قاعدة البيانات، وإلى أنواع القيم الممرّرة إليها، والتأكّد من قابليّة التحويل فيما بينها.
  14. تقنيّة مسارات التنفيذ المتعدّدة Multithreading هي تقنيّة يمكن من خلالها تنفيذ أكثر من مسار تنفيذ Thread بنفس الوقت. وهي تقنيّة ليست خاصّة بـ Java بل هي مستخدمة في العديد من لغات البرمجة. في لغات البرمجة التي تدعم مفهوم OOP (مثل جافا) يكون مسار التنفيذ Thread عبارة عن تابع Method ضمن أحد الأصناف، يحتوي هذا التابع عن بعض الشيفرة البرمجيّة التي يتم تنفيذها، بمجرّد الخروج من هذا التابع يتوقّف تنفيذ مسار التنفيذ. تعتمد التطبيقات عادةً على وجود مسار تنفيذي رئيسيّ يعمل على إنشاء مسارات تنفيذ أخرى عند الحاجة. فإذا جرّبت مثلًا في أحد البرامج أن تنقر على زر يعمل على جلب بيانات ذات حجم كبير من الانترنت، وأثناء ذلك استطعت أن تنفّذ بعض المهام الأخرى على نفس البرنامج، فأنت في الحقيقة تكون قد استخدمت مسارات تنفيذ متعدّدة MultiThreading. السبب في ذلك أنّ مسار التنفيذ الرئيسي الذي يسمح لك بالتفاعل مع أزرار البرنامج، قد أنشئ مسار تنفيذ جديد (نتيجة نقرك للزر) يعمل على جلب البيانات المطلوبة من الانترنت دون أن يشغل مسار التنفيذ الرئيسي، بدليل أنّك استطعت أن تنفّذ مهام أخرى من نفس البرنامج. الوصف السابق بسيط للغاية، والموضوع كبير جدًّا، ولكن بعض لغات البرمجة قد تجعل منه أكثر سهولة من ناحية الاستخدام مثل لغة سي شارب.
  15. يعمل التابع HttpUtility.UrlEncode على إجراء ما يلي على النص الممرّر له: 1- استبدال كل فراغ بالمحرف (+). 2- استبدال كل محرف غير حرفي (أحرف الأبجديّة الانجليزية) أو غير رقمي بتمثيله الست عشري hexadecimal. مثال: رابط هذه الصفحة هو: https://academy.hsoub.com/questions/6169-ما-هو-urlencode-وurldecode؟/ بعد تمرير هذا النص إلى التابع HttpUtility.UrlEncode سنحصل على النتيجة التالية: https%3a%2f%2facademy.hsoub.com%2fquestions%2f6169-%d9%85%d8%a7-%d9%87%d9%88-urlencode-%d9%88urldecode%d8%9f%2f أي باختصار، يستبدل هذا التابع المحارف التي قد تسبّب بعض المشاكل حين يتمّ تفسيرها على الأنظمة المختلفة، بمحارف أخرى تكافئها ولا تسبّب مثل هذه المشاكل. بالنسبة للتابع HttpUtility.UrlEncode فيعمل بالعكس تمامًا. ملاحظة: ستحتاج إلى إضافة مرجع reference إلى الملف System.Web.dll إلى مشروعك، في حال كان هذا المرجع غير موجودًا.
  16. لغة CoffeeScript هي لغة نصيّة Scripting Language تُترجم إلى JavaScript. بمعنى أنّ أي تعليمات برمجيّة تكتبها باستخدام هذه اللغة، سيتمّ تحويلها إلى مكافئاتها من العبارات البرمجيّة المكتوبة بلغة JavaScript قبل أن يتم تنفيذها. تستطيع القول أنّها عبارة عن أسلوب مختلف لكتابة JavaScript. فأي مكتبة مكتوبة بلغة CoffeeScript سيتم تحويلها بالكامل إلى مكافئها بلغة JavaScript. والعكس صحيح. إذ من الممكن تحويل مكتبة بلغة JavaScript إلى ما يكافئها بلغة CofeeScript وإجراء بعض التعديلات عليها ومن ثمّ ردّها مرّة أخرى إلى JavaScript. توجد أيضًا لغة TypeScript التي تسلك نفس سلوك CoffeeScript في علاقتها مع JavaScript. انظر إلى كود CoffeeScript التالي: Square = (x) -> result = x * x result alert Square(5) سيتم تحويل الكود السابق إلى الكود التالي بلغة JavaScript: var Square = function(x) { var result = x * x; return result; }; alert(Square(5));
  17. الشير بوينت SharePoint هو عبارة عن منصّة تشاركيّة متكاملة تعمل كتطبيق ويب ضخم، وهو مخصّص في الواقع للشركات. يمكنك من خلال شير بوينت أن تنشئ مواقع ويب خاصّة بشركتك، قد تكون هذه المواقع عامّة على الانترنت، أو ضمن شبكة محليّة خاصّة بالشركة، أو مزيج من الاثنين معًا. يمكنك من خلال شيربوينت أن تشارك الملفات والصور والمستندات بين أعضاء الموقع، وغيرها من المهام الأساسيّة التي تتمتّع بها أنظمة إدارة المحتوى. كما يمكنك إنشاء نسخ تحكّم بالإصدار Version Control لكلّ ملف موجود في أيّ مكتبة. ومن الممكن أيضًا أن تتحكّم على نحو كامل بصلاحيّات المستخدمين ضمن هذه المواقع. كما توجد إمكانيّات واسعة جدًّا للتطوير البرمجي ضمنه باستخدام Visual Studio ولغة سي شارب C# مثلًا. توجد العديد من القوالب الجاهزة التي تستطيع من خلالها بناء ما ترغبه من قوائم الملاحظات والمهام والمتابعة، والمكتبات وجهات الإتصال. باختصار وُجد الشير بوينت ليحل مكان العمل الورقي الروتيني في أيّ شركة. انظر لهذا المقال الذي يُعتبر كمقدّمة لشير بوينت:
  18. كلامك صحيح أخي محمد. ولكن هذا الأمر يتطلّب أيضًا تراكم خبرة عدة سنوات كي تستطبع تقديم مثل هذه التصاميم الاحترافية وجني هذا المقدار من المال.
  19. هناك حل بسيط. أضف الكود التالي إلى حدث Page_Load الخاص بصفحة تسجيل الدخول Login على الشكل التالي: protected void Page_Load(object sender, EventArgs e) { if (Session["username"] != null) Response.Redirect("welcome.aspx"); } ستعمل الشيفرة السابقة ضمن الحدث Load للصفحة Login على التأكّد من وجود جلسة صالحة للعمل قبل تحميل صفحة تسجيل الدخول. فإن كانت هذه الجلسة موجودة (أي صالحة) سيتم تحويل المتصفّح فورًا إلى صفحة الترحيب welcome ولا تظهر صفحة تسجيل الدخول، وإلّا فسيكون المستخدم غير مسجّل للدخول، لذلك ستظهر له صفحة تسجيل الدخول كالمعتاد.
  20. 1- من زر إبدأ Start اختاري لوحة التحكم Control Panel. 2- من System And Security اختاري Back up your computer. 3- من القائمة الجانبية اليسرى انقري Create a system image. ستظهر لك هذه النافذة: لاحظي أنّني أستخدم قرص صلب خارجي، وقد اكتشفه ويندوز تلقائيًّا. 4- يمكنك إنشاء صورة image على محرّك أقراص DVD ولكن غالبًا لن تجدي محرّك أقراص DVD كافٍ لهذه العمليّة. أو يمكنك إنشاء هذه الصورة على محرّك أقراص شبكي (الخيار On a network location ) والذي يتطلّب من حاسوبك أو يكون على شبكة محليّة، وأن تكون هناك مشاركة معه على مجلّد ما. 5- بعد نقر زر Next. ستنتقلين إلى نافذة توضّح مالذي سيتم ضمّه في النسخ الإحتياطي image، مع الوسيط الذي سيُستخدَم في التخزين. 6- انقري زر Start Backup لتبدأ عملية إنشاء النسخة الإحتياطية image لكامل محرّك الأقراص الذي اخترته. ملاحظة: إذا كنت تمتلكين قرصي صلب منفصلين، فيمكن إجراء نسخ إحتياطي من أحدهما على الآخر دون الحاجة إلى قرص صلب خارجي أو مشاركة على الشبكة.
  21. ما هي لوحة التحكم التي يوفّرها لك المستضيف؟ هل هي Plesk أم cPanel مثلًا؟
  22. لملفات برنامج EagleGet الامتداد EGT. هذا البرنامج هو برنامج مجاني يُستخدَم للتنزيل download عبر الانترنت. ينزّل الملفات العاديّة والفيديو من صفحات الويب. الملفات التي لها الامتداد EGT هي ملفات مُنشأة باستخدام برنامج EagleGet وهي تعبّر عن ملفات يُراد تنزيلها ولكنّها غير مكتملة بعد. ربما بسبب أنّ المستخدم قد أوقف عمليّة التنزيل أو أجّلها أو لأسباب أخرى. يمكنك الوصول إلى موقع البرنامج EagleGet من هنا. ملاحظة: عند نقري على رابط Videos من الصفحة الرئيسية (في الأعلى)، وجدت أنّ المتصفّح ينتقل إلى صفحة جديدة ولكن يبدو أنّ الشهادة الخاصّة بها غير صالحة (وضع متصفّح الانترنت لدي علامة حمراء على بروتوكول https). لذلك وجب التنبيه.
  23. بالنسبة للكتابة إلى الملفات النصية: 1- يجب تضمين المكتبة stdio.h. 2- ثمّ نعرّف مؤشّر للكائن FILE. 3- نفتح الملف باستخدام الدالة fopen الذي يتطلب وسيطين: مسار الملف، بالإضافة إلى طريقة الفتح (نضع الخيار w للكتابة فقط، والخيار +w للكتابة مع القراءة على أن يتم مسح محتويات الملف في حال كان موجودًا أو إنشاء واحد جديد إن لم يكن كذلك). 4- يمكن كتابة أي نص ترغبه باستخدام التابع fprintf وهو يطلب وسيطين أيضًا: المؤشّر إلى الملف الذي فتحناه قبل قليل، بالإضافة إلى النص المراد كتابته إلى الملف. 5- إغلاق الملف باستخدام الدالة fclose التي تتطلّب مؤشّر الملف الذي فتحناه سابقًا. بالنسبة للقراءة من الملفات النصية: 1- نفس الخطوة 1 السابقة. 2- نفس الخطوة 2 السابقة. 3- نفس الخطوة 3 السابقة مع الانتباه إلى الخيار r يعني قراءة فقط، والخيار +r يعني القراءة والكتابة معًا. 4- يمكن قراءة أي نص باستخدام الدالة fgets وهي تتطلّب ثلاثة وسائط: الأوّل هو مؤشر الملف الذي فتحناه، والثاني هو كمية المحارف المراد قراءتها، والثالث هو متغيّر (يكون عادة مؤشّر) لكي تستطيع الدلة fgets تخزين النص الذي تقرؤه من الملف ضمنه. 5- نفس الخطوة 5 السابقة. إليك الآن البرنامج التالي الذي ينشئ ملفًا نصيًا اسمه test.txt ضمن المجلد tmp (يجب أن تنشئ هذا المجلد) ويكتب إليه النص "My name is saeed\n" ثم يقرأ نفس النص مرة أخرى ويطبع النتيجة على الشاشة، ومن ثم يغلق الملف: #include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "My name is saeed\n"); fseek(fp, 0, SEEK_SET); fgets(buff, 255, fp); printf("%s\n", buff ); fclose(fp); } لاحظ المتغيّر buff الذي سيستخدم كوسيلة تخزين للنص المقروء من الملف. ملاحظة: تقرأ الدالة fgets نفس عدد المحارف المعيّن إليها ناقص واحد، أو حتى تبلغ نهاية الملف، أو حتى تصادف محرف سطر جديد n\
  24. إذا كنت تستخدم نظام التشغيل Windows 8.1 فأنت لست بحاجة إلى برنامج Microsoft Security Essentials، وذلك لأنّ برنامج Windows Defender موجود سلفًا ضمن نظام التشغيل Windows 8.1 وهو يكافئ تمامًا برنامج Microsoft Security Essentials. انظر الرابط من هنا. وإذا أردت نصيحتي. تجنّب استخدام أنظمة مكافحة الفيروسات من مايكروسوفت فهي ليست ناضجة بعد بالشكل المناسب (رأي شخصي). بالنسبة إليّ فأستخدم Norton Antivirus أمّا إذا كنت ترغب بمضاد فيروس مجّاني فأنصحك بأفيرا Avira.
×
×
  • أضف...