PDA

View Full Version : مبتدی: ذخیره ی یک شی در یک فایل txt



ghazal_mohammady
چهارشنبه 06 فروردین 1393, 00:09 صبح
عرض ادب خدمت تمام بزرگواران
یه سوال، چطور میشه یک شی که دارای فیلدهای مختلفی هست در یک فایل تکس ذخیره کرد، و بعد از بازیابی فیلدها جداگانه بازیابی و در مکان های مورد نظر قرار گیرند؟
از راهنمایی شما سپاس گزارم

winner1
چهارشنبه 06 فروردین 1393, 00:13 صبح
سوالتو اصلا نفهمیدم چیه بخدا

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 00:29 صبح
عذر میخوام ....
من یه شی دانشجو دارم که مشخصاتش مث نام نام خانوادگی و غیره ست ...
اینا رو تو برنامه از کابر می گیره در تکس باکس های مختلف، و فقط نام و نام خانوادگی رو در لیست باکس نمایش می ده، حالا می خوام این اطلاعات رو در یک فایل تکس ذخیره کنم، و بازیابی کنم ...
واضح نیست؟

Mahmoud.Afrad
چهارشنبه 06 فروردین 1393, 00:47 صبح
راه زیاده.
ذخیره در فایل معمولی ، xml ، ذخیره از طریق BinaryFormatter ....
همه قبلا بحث شده.

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 00:54 صبح
حق با شماست، مشکل کار من چیه ؟
این برای سیو


private void SaveSTD_Click(object sender, EventArgs e)
{
FileStream str = new FileStream("C:\\test.txt", FileMode.Create);
StreamWriter write = new StreamWriter(str);
foreach (Student cr in Stdbinding)
write.WriteLine(cr);
write.Close();

}
اینم یه تابع است که توی فرم لود فراخوانی میشه


private void loadStudent()
{
if (File.Exists("C:\\test.txt"))
{
string matn = File.ReadAllText("C:\\test.txt");
string[] kalame = matn.Split('@');
foreach (string k in kalame)
listSTD.Items.Add(k);
}


}

ضمنا من فقط از این طریق باید ذخیره سازی رو انجام بدم

Mahmoud.Afrad
چهارشنبه 06 فروردین 1393, 01:19 صبح
چرا فقط از این طریق؟

sohil_ww
چهارشنبه 06 فروردین 1393, 01:25 صبح
اول از همه سلام به شما و محمد استاد گلم و با اجازه

کدات که درست به نظر میان و من ایرادی نمی بینم ولی یه چک کنید که رو درایو c حق نوشتن دارید(سطح دسترسی )

خوب اگه مجبورید که حتما با فایل های txt کار کنید و در ضمن دانت 4 به بالا کار می کنید من به شما textreader و textwriter پیشنهاد می کنم که خیلی کارو راحت کردن اصلا واسه این کار خلق شدن

موفق باشید

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 01:25 صبح
فرمایش استادمون هست، گفتن از این طریق کار کنید یه فایل تکس بسازید و کل اطلاعات دانشجو رو درونش ذخیره کنیدو در آخر هر اطلاعات یک علامت قرار بدین مثلا @ که موقع باز یابی بتونین ازین طریق اطلاعات رو از هم تمییز دهید، خودم از طریق باینری انجام دادم ولی اینو نمیتونم .

Mahmoud.Afrad
چهارشنبه 06 فروردین 1393, 01:36 صبح
خب میبایست خصوصیات رو به هم بچسبونید و ذخیره کنید.
write.WriteLine(cr.FirstName + "@" + cr.LastName + ...);
موقع بازیابی هم بر جسب کاراکتر @ جداکنید.(در مورد Split جستجو کنید).

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 01:48 صبح
سپاس استاد گرانقدر
من همین کارو کردم تو لود شدن فایل تکسه که مشکل دارم، میخوام با لود برنامه مقادیر قبلی در لیست باکس باشن ولی نیست...
ذخیره رو انجام میده...

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 01:53 صبح
و یه سوال دیگه اینکه آیا با این روش ذخیره کردن، مقادیر قبلی ذخیره سازی از بین میره؟

sohil_ww
چهارشنبه 06 فروردین 1393, 01:54 صبح
من بازم می گم روش کارت کاملا درست هست(شاید یه چیزیو من نمی بینم )

به همین دلیل من یه نمونه از این روش برات درست کردم یه نگاه بنداز تا شاید خودت بتونی مشکل و حل کنی موفق باشی



117299

sohil_ww
چهارشنبه 06 فروردین 1393, 01:55 صبح
و یه سوال دیگه اینکه آیا با این روش ذخیره کردن، مقادیر قبلی ذخیره سازی از بین میره؟


بله دقیقا چون شما نمیای مقدار هاتو اضافه کنی و دقیقا همین می شه


شب بخیر دیگه این خواب داره چشامو می گیره

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 11:35 صبح
بسیار سپاس گزارم، خب پس باید از چه روشی استفاده کنم که اطلاعات قبلم پاک نشه؟ از روش append?

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 11:38 صبح
من بازم می گم روش کارت کاملا درست هست(شاید یه چیزیو من نمی بینم )

به همین دلیل من یه نمونه از این روش برات درست کردم یه نگاه بنداز تا شاید خودت بتونی مشکل و حل کنی موفق باشی



117299

باز هم سپاس گزارم، اینم که تقریبا مثل چیزیه که منم نوشتم! فقط توی لود شدن مشکل دارم...:ناراحت:

ghazal_mohammady
چهارشنبه 06 فروردین 1393, 13:33 عصر
برنامه رو خط به خط اجرا کردم، عمل سیو درست انجام میشه، و در تابع loadStudent هم میره اما وقتی به listSTD.Items.Add(k) میرسه یه بار فرمو نشون میده بعد دیگه ادامه نمیده....:ناراحت:

Mahmoud.Afrad
چهارشنبه 06 فروردین 1393, 13:54 عصر
باید برای هر خط split انجام بدی:

List<Student> lst;

private void loadStudent()
{
if (File.Exists("C:\\test.txt"))
{
lst = new List<Student>();
string[] matn = File.ReadAllLines("C:\\test.txt");
foreach (string line in matn)
{
string[] kalamat = line.Split('@');
Student s = new Student();
s.id = Convert.ToInt32(kalamat[0]);
s.FirstName = kalamat[1];
s.LastName = kalamat[2];
lst.Add(s);
listSTD.Items.Add(s.FirstName + " " + s.LastName);
}
}
}

winner1
چهارشنبه 06 فروردین 1393, 14:15 عصر
چرا از دیتا بیس استفاده نمیکنین؟