تبلیغات
banner
banner
banner
تبلیغات
banner

فیلم های آموزشی : 36 +

تعداد کاربران : 44 +

تعداد کل مطالب : 338 +

تعداد نظرات : 33 +

حضرت محمد (ص) : طلب دانش بر هر مسلمانى واجب است. خداوند جويندگان دانش را دوست دارد.

آموزش مقدماتی تا پیشرفته سی شارپ بخش دویست و پنجاه و دوم


بنام اول برنامه نویس هستی.

سلام به همه لندلرنی های عزیز.
درخدمتتون هستیم با

آموزش مقدماتی تا پیشرفته سی شارپ بخش دویست و پنجاه و دوم


خب، تا اینجا متوجه شدیم که چه فایلی توسط برنامه تولید شده است.

اما سوال اینجاست که این فایل چگونـه ایجـاد شـده اسـت؟

بنابراین از هنگامی که کاربر روی دکمه ی Save کلیک می کند اجرای برنامه را دنبال می کنیم.

ابتــــدا در ایــــن متــــد یــــک شــــیئ از نــــوع Address ایجــــاد کــــرده و ســــپس بــــا فراخــــوانی متــــد PopulateAddressFromForm شیئ ایجاد شده را به این متد ارسال می کنیم.

این متد نیز فقط داده هـای درون کادرهای روی فرم را می خواند و آنها را در فیلد های مختلف کلاس Address قرار می دهد.

سپس با استفاده از خاصیت DataFileName نام فایلی که باید داده ها در قالب XML در آن ذخیره شـوند را دریافـت مـی کنیم.

برای این کار با استفاده از خاصیت CurrentDirectory از کلاس Environment ،مـسیری کـه فایـل اجرایی برنامه در آن قرار دارد را به دست آورده و نام فایل “AddressBook.xml\”را به انتهای این مسیر اضافه مـی کنیم تا مشخص شود داده ها باید در چه فایلی قرار گیرند.

در این برنامه قرارداد می کنیم کـه بـرای ذخیـره و یـا بازیـابی داده هـای برنامه، از فایل XMLای که در بالا ایجاد کردیم استفاده کنیم.

سپس با فراخوانی متد Save از کلاس Address ،داده ها را در فایل مشخص شده ذخیـره مـی کنـیم.

ایـن متـد از کـلاس SerializableData به کلاس Address به ارث رسیده است و در ادامه با نحـوه ی عملکـرد آن آشـنا خـواهیم شد.

بعد از اینکه فایل را ذخیره کردیم با استفاده از یک کادر پیغام، مکان آن را به کاربر نمایش می دهیم :

در کلاس SerializableData دو نسخه از متد Save وجود دارند که جالب ترین قسمتهای ایـن برنامـه محـسوب می شوند.

یک نسخه آدرس فایل را به عنوان ورودی دریافت کرده و شیئ از نوع Stream را با اسـتفاده از آن ایجـاد مـی کنـد.

سپس این شیئ را به نسخه ی دوم متد Save می فرستد تا به وسیله ی آن داده ها ذخیره شوند.

نسخه ی دوم نیز بـا اسـتفاده از کلاس System.Xml.Serialization.XmlSerializer که در ادامه با آن آشنا خواهیم شد و نیـز
شیئ Stream که به آن فرستاده شده است داده ها را در قالب XML ذخیره می کند.

در هنگام ذخیره ی داده ها در فایل باید به یک مسئله دقت کنید.

هنگامی که بخواهیم یک رکورد را ذخیره کنـیم، داده هـای آن در فایلی با همان نام فایل قبلی ذخیره می شوند.

بنابراین فایل مربوط به اطلاعات رکورد قبلی از بین می رود.

اما باید دقت کنـیم فایـل جدید را به گونه ای ایجاد شود که اگر به هر دلیلی در ایجاد آن با شکست مواجه شدیم، اطلاعات رکورد قبلی از بـین نرونـد و کـاربر بتواند به آنها دسترسی داشته باشد.

روش انجام این کار نیز ساده است.

ابتدا داده های مربوط به رکورد جاری را در یک فایـل بـا نـام دیگری ذخیره می کنیم.

زمانی که همه چیز با موفقیت به اتمام رسید، فایل ایجاد شده را با فایل مربـوط بـه اطلاعـات رکـورد قبلـی جایگزین می کنیم.

برای نام فایلی که باید داده های رکورد جدید به صورت موقت در آن نگهداری شوند، به نام فایل اصلی پسوند tmp. اضـافه مـی کنیم.

بنـابراین اگـر نـام فـایلی کـه داده هـا بایـد در آن ذخیـره شـوند ابتدا داده هـا در فـایلی بـه نـام AddressBook.tmp.xml ذخیره می شود.

خب، ابتدا قبل از ایجاد فایل، بررسی می کنیم کـه فـایلی بـا این نام وجود نداشته باشد.

ولی اگر چنین فایلی ایجاد شده باشد آن را با فراخوانی متد Delete حذف می کنیم.

در مرحله ی بعد یک فایل با نام مشخص شـده و پـسوند tmp. ایجـاد مـی کنـیم.

بـرای ایـن کـار بایـد یـک شـیئ از کـلاس FileStream نمونه سازی کرده و آدرس فایل و نیز نوع دسترسی به آن را در متد سازنده ی کلاس مشخص کنیم.

سپس این شیئ را به نسخه ی دوم متد Save ارسال می کنیم.

نحوه ی عملکرد این متد در ادامه توضیح داده شده است، اما فعلا بدانید که قسمت اصلی عمل سریالایز کردن درون این متد انجام می شود.

سپس فایل را می بندیم :

در مرحله ی آخر نیز ابتدا با استفاده از متد CopyTo فایل را در فایل جدید با نام اصلی کپی می کنیم (پارامتر true مـشخص می کند که هنگام کپی کردن این فایل، اگر فایلی با این نام وجود داشت آن را حذف کن )، سپس فایل مـوقتی را بـا اسـتفاده از متـد
Delete پاک می کنیم.

نسخه ی دوم متد Save به جای یک رشته، یک شیئ از کلاس Stream و یا یکـی از کلاسـهای مـشتق شـده از آن را بـه عنوان ورودی دریافت می کند و مشابه زیر است :

نکته: تمام موارد مربوط به ورودی و خروجی در یک برنامه به وسیله ی کلاسهای مشتق شده از کـلاس Stream انجـام مـی شوند.
برای مثال خواندن و نوشتن در یک فایل، خواندن و نوشتن در حافظه و …. این کلاس به همراه کلاسهای دیگـری در رابطـه با همین موضوع در فضای نام System.IO قرار دارد.

در قسمت دویست و پنجاه و سوم درباره ” دریافت داده ها از یک فایل XML ” آشنا میشویم.


درباره نویسنده
سجاد اسدی
   سجاد اسدی

سجاد اسدی هستم دانشجوی رشته نرم افزار و علاقه مند به تدریس و یادگیری دروس مرتبط با تکنولوژی نرم افزار و اینترنت اشیاء جهت ارتباط با بنده مراجعه شود به آیدی سروش و تلگرام : @ordervira و پیج بنده در اینستاگرام instagram.com/sajjadred11 ""اللهم صل علی محمد و آل محمد"" برای شروع هیچ وقت دیر نیست. "الهم عجل لولیک الفرج"

دیدگاه بگذارید

avatar
  اشتراک  
اطلاع رسانی

aparat کانال آپارات

soroush کانال سروش

کانال آی گپ