PDA

View Full Version : ذخیره کردن اشایی از کلاس در فایل متنی



aliblue
چهارشنبه 24 فروردین 1390, 13:42 عصر
برای این که اشیایی که از کلاس

class student
{
public string name;
public int code;

}

ساخته می شوند رو به ترتیب با فشردن دکمه تو یه فایل متنی ذخیره کنیم
و بعد به ترتیب با فشردن دکمه دیگری تک تک اشیا را از فایل بخوانیم چه کار باید بکنیم؟

m.soleimani
چهارشنبه 24 فروردین 1390, 13:57 عصر
برای این که اشایی که از کلاس

class student
{
public string name;
public int code;

}

ساخته می شوند رو به ترتیب با فشردن دکمه تو یه فایل متنی ذخیره کنیم
و بعد به ترتیب با فشردن دکمه دیگری تک تک اشیا را از فایل بخوانیم چه کار باید بکنیم؟

یک یا چند کاراکتر برای خودت به عنوان جداکننده انتخاب کن که بعد از این که هر کدوم از اشیا مورد نظرت به فایل متنی اضافه شدن توی یه خط جدید به همون فایل متنی اضافه بشه حالا برای به دست آوردن دوباره اطلاعات هم چک می‌کنی هنگام خوندن فایل متنی هر بار که به یکی از این نشونه‌ها رسیدی یعنی یه شی رو قبلش خوندی و این کار رو تا پایان فایل انجام بده موفق باشی./

aliblue
چهارشنبه 24 فروردین 1390, 14:30 عصر
از پاسختون ممنون ولی من فکر کنم راه های بهتری هم وجود داشته باشه .مثلا


BinaryFormatter reader = new BinaryFormatter();
BinaryFormatter writer = new BinaryFormatter();
private void button1_Click(object sender, EventArgs e)
{
// if (openFileDialog1.ShowDialog() == DialogResult.OK)
// {

FileStream input = new FileStream("stud.txt", FileMode.Open, FileAccess.Read);
student record = (student)reader.Deserialize(input);
MessageBox.Show(record.name);
//}
}
private void button2_Click(object sender, EventArgs e)
{
student x = new student();
x.name = textBox1.Text;
x.code = 20;
student y = new student();
y.name = "reza";
y.code = 21;

if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream output = new FileStream("stud.txt", FileMode.OpenOrCreate, FileAccess.Write);
writer.Serialize(output,x);
writer.Serialize(output, y);
}
}

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

exlord
چهارشنبه 24 فروردین 1390, 14:49 عصر
اما مشکل اینجاست که هر بار شی جدید جایگزین قبلی می شود نه این که در ادامه ی فایل درج شود.
توی read هم باید هر آبجکت رو جداگانه بخونین ..
object record1 = reader.Deserialize(input);
object record2 = reader.Deserialize(input);
البته میتونی اینجوری هم عمل کنی ...
List<student> std = new List<student>() { x, y };
writer.Serialize(output, std);

aliblue
چهارشنبه 24 فروردین 1390, 15:04 عصر
حالا چه جوری از فایلی که چند شی در آن ذخیره شده به ترتیب آن ها را بخوانیم(با هر بار فشردن دکمه)؟

exlord
چهارشنبه 24 فروردین 1390, 15:18 عصر
اگه به صورت لیست ذخیره کردی :
List<student> records = (List<student>)reader.Deserialize(input);
اگه تک تک ذخیره کردی ...

توی read هم باید هر آبجکت رو جداگانه بخونین ..
object record1 = reader.Deserialize(input);
object record2 = reader.Deserialize(input);

aliblue
چهارشنبه 24 فروردین 1390, 16:04 عصر
متاسفانه زمان اجرا خطا می گیره.در صورت امکان یه برنامه کامل بذارین.

reza_edu
چهارشنبه 24 فروردین 1390, 16:13 عصر
وقت توضيح كامل ندارم بهتره از ساختارها "struct" استفاده كني نمونش تو كد پروجكت هست اما من خودم از ساختار ها تو ويبي استفاده كردم با استفاده از يه dll كه نوشتم اين روش راهت تره و نياز با كاركتر جدا كننده نداره ركورد بندي مثل ديتابيس. وقت كردم توضيح رو با مثال ميزارم .