کار با فایل در سی شارپ
شاید برای خیلی از شما دوستان پیش آمده باشه که بخواهید اطلاعات مورد نظرتون را داخل فایل ها ذخیره و یا از فایلی بازیابی کنید. در این جلسه از آموزش می خواهم یک مثال در رابطه با کار با فایل ها در سی شارپ بنویسم.
در دات نت یک namespace به نام System.IO وجود داره که داخلش کلی کلاس مختلف برای کارکردن با فایل ها وجود دارد. ابتدا اجازه بدین در رابطه با مفهومی به نام Stream توضیح بدم. Stream در واقع به یک سلسله از بایت ها اشاره میشه. حالا شما می تونید خودتون یک Stream ایجاد کنید و یا اینکه از Stream های بوجود آمده توسط دیگران استفاده کنید. در System.IO یک کلاس abstract به نام Stream وجود دارد که کلاس های زیر از آن به ارث رفته اند. نکته مشترک بین این کلاس ها این است که تمامی آن ها در واقع مجموعه ای از بایت های کنار هم هستند که می توانند حاوی اطلاعات باشند.
FileStream: همانطور که از اسمش برمی آید این کلاس به سلسله بایت های کنار هم در که یک فایل قراردارند اشاره می کند. در این کلاس متد ها و خصوصیاتی وجود دارند که به شما کمک می کنند که با فایل ها کار کنید ، اطلاعات بخوانید ، بنویسید و ...
NetworkStream: این کلاس هم یک مدل Stream است که در شبکه تبادل می شه و متناسب با نیازمندی های شبکه متد ها و خصوصیات خاص خود را دارد.
MemoryStream: این کلاس هم به شما امکان می ده تا یک سری اطلاعات را در حافظه نگهداری کنید. معمولا وقتی می خواهیم که یک Stream تولید بشه ولی نمی خواهیم که روی شبکه و یا فایل ذخیره بشه از این کلاس استفاده می کنیم.
برای اینکه این مفاهیم را بهتر درک کنیم می خواهم یک مثال ایجاد کنم که با فایل های متنی کار می کنه. حتما همه شما نرم افزار notepad ویندوز را دیدید. مثال ما هم شبیه به notepad خواهد بود. برای اینکار از یک پروژه نوع ویندوز استفاده می کنم و در داخل فرم اصلی نرم افزارم یک TextBox قرار می دهم. خصوصیت Multiline را به true ست می کنم و خصوصیت Dock را Fill تنظیم می نمایم و در نهایت اسم کنترل را به txtContent ست می کنم. سپس یک منوی اصلی با عنوان "پرونده" و چهار زیر منو با عناوین "جدید" ، "باز کردن" , "ذخیره" و در نهایت "خروج" ایجاد می نمایم.
حالا من به دو متغیر نیاز دارم. متغیر اول برای اینکه بدونم که در هر لحظه چه فایلی باز شده است (من مسیر فایلی که باز کردم را نگه می دارم) از جنس string و با نام currentFilePath نگه می دارم. وقتی که فایل جدید دارم مقدار این متغیر را به string.Empty یا همان "" ست می کنم. متغیر دوم ، برای این است که بدونم آیا فایلی رو که بازکردم تغییر دادم یا نه. این متغیر را از جنس bool و با اسم isDirty نگه می دارم. در صورتیکه این مقدار این متغیر به true ست شده باشه معنی اش اینه که کاربر از زمانی که فایل را باز کرده تغییری در آن ایجاد کرده است.
حالا روی منوی جدید دوبار کلیک می کنم تا متد Handler برای رویداد کلیک این منو آیتم ایجاد شود. در این متد من باید 3 کار اصلی در این متد انجام بدم:
1. اطلاعات موجود در TextBox فرم را پاک کنم.
2. متغیر currentFilePath را به string.Empty ست کنم. (با اینکار اعلام میکنم که یک فایل جدید دارم)
3. متغیر isDirty را به false ست کنم. (با اینکار اعلام می کنم که هنوز کاربر تعییری ایجاد نکرده است)
پس شما باید این سه خط کد را داشته باشید:
اگر مثال خود را تا اینجا تست کنید شما می توانید محتویات یک فایل Text را خوانده و برای کاربران نمایش دهید.