روشهای متنوعی برای ذخیرهسازی محتوای گوناگون وجود دارند؛ که بستگی به شرایطی که داریم، ممکن است از آنها استفاده کنیم. اما در این میان، یکی از روشها، ذخیرهی محتوا در یک فایل متنی ساده میباشد. در اینجا نیز قصد داریم تا آیتمهای یک ListBox ای را داخل یک فایل متنی ذخیره کرده و سپس در زمان اجرای برنامه، بارگزاری (لود) کنیم.
روش انجام کار
همانطور که میدانید، ابتدا باید ساختار ذخیرهسازی خود را مشخص کنیم! و در اینجا، از آن جهت که لیست باکس شامل آیتمهایی میباشد که زیر هم قرار گرفتهاند، من ترجیح میدهم تا درون یک فایل متنی و در هر خط، یکی از آیتمها را نگهدارم تا بعدا در زمان خواندن آن فایل، هر خط را یک به یک به لیست باکسم اضافه کنم!
ذخیره سازی
برای ذخیره سازی و بارگزاری، ما نیاز به یک مسیر ذخیره سازی برای فایل داریم که در اینجا میخواهیم کنار فایل اجرایی برنامه باشد؛ و برای مثال نام آن فایل را list.txt قرار دهیم.
برای ذخیره کردن محتوای ListBox، بهتر است متدی بنویسیم که اینکار را برایمان انجام دهد:
1 2 3 4 5 | public void SaveListBox(ListBox list, string fileName) { string[] items = list.Items.Cast<string>().ToArray<string>(); File.WriteAllLines(fileName, items, Encoding.UTF8); } |
در مورد روشهای به دست آوردن مسیر فعلی برنامه، قبلا در «اینلینک» اشاره کردیم؛ ولی چون در بالا، متد WriteAllLines در صورتی که مسیر کاملی تنظیم نشده باشد آن را به ادامهی مسیر فعلی برنامه اختصاص میدهد، دیگر از آن روشها استفاده نشده است، گرچه میتوانستیم به صورت زیر مسیر را اختصاص دهیم:
1 | string filePath = Environment.CurrentDirectory + @"\" + fileName; |
متد WriteAllLines ای که در کلاس File تعریف شده است، با دریافت یک مسیر و یک آرایهی رشتهای، هر آیتم آرایه را در یک خط مینویسد؛ که در بالا، آیتمهای لیست باکس را با استفاده از روشی که در «اینلینک» گقته شده است، به یک آرایهی رشتهای تبدیل کرده و سپس از آن در متد WriteAllLines استفاده کردهایم. ورودی سوم این متد نیز انکودینگ را دریافت میکند که اگر آن را تنظیم هم نکنیم اشکالی ندارد ولی بهتر است که بنویسیم.
بارگزاری
برعکس متد WriteAllLines، متدی با نام ReadAllLines نیز وجود دارد که خط به خط یک فایل متنی را خوانده و یک آرایهی رشتهای از آن به ما میدهد! پس میتوان به صورت زیر عمل کرد:
1 2 3 4 5 6 | public void LoadToListBox(ListBox list, string fileName) { string[] items = File.ReadAllLines(fileName, Encoding.UTF8); list.Items.Clear(); list.Items.AddRange(items); } |
در مورد WriteAllLines که همه چیز واضح است؛ و در ادامه، ابتدا محتوای لیست باکس را پاک کرده (Clear) و سپس یک آرایه را به آن اضافه کردهایم (AddRange)! توجه داشته باشید که به جای استفاده از AddRange، میتوان از یک حلقه برای اضافه کردن آیتمهای آرایه با استفاده از متد Add استفاده کرد که کدمان را طولانیتر میکند.
مثال
حالا دو دکمه جهت ذخیره و لود کردن، و یک لیست باکس اضافه کنید. آیتمهایی را به لیست باکس اختصاص دهید و سپس وارد رویداد کلیک دکمهها شده و آنها را به صورت زیر تکمیل کنید:
1 2 3 4 5 6 7 8 9 | private void button1_Click(object sender, EventArgs e) { SaveListBox(listBox1, "list.txt"); } private void button2_Click(object sender, EventArgs e) { LoadToListBox(listBox1, "list.txt"); } |
برای درک آنجه که در لینک «پسوند و فرمت» گفته شد، میتوانید به جای list.txt، مواردی مثل list یا list.zip و list.rar و .. را تست کنید تا درک کاملی از تفاوت پسوند و فرمت داشته باشید.
نظرات ثبت شده بدون دیدگاه