PDA

View Full Version : کمک برای کار با فایل در #C



mreza_j
پنج شنبه 16 دی 1389, 10:55 صبح
سلام

چه جوری میشه اطلاعات 4تا تکس باکس رو به کمک یک دکمه تو فایل ذخیره کرد که موقع نمایش همه اطلاعات باز نشونمون بده :متفکر::متفکر::متفکر:

babakkiani
پنج شنبه 16 دی 1389, 13:39 عصر
سلام
64626
کد زیر رو ببین دوست عزیز، و این کد رو پشت Bottone بذار.


privatevoid button1_Click(object sender, EventArgs e)
{
StreamWriter sr = newStreamWriter(@"C:\text.txt");
sr.WriteLine(textBox1.Text + textBox2 + textBox3 + textBox4);
sr.Close();
}

Hossenbor
پنج شنبه 16 دی 1389, 14:49 عصر
فکر کنم تازه در این زمینه کار می کنی خوب چند چیز که بلدم برات مشخص می کنم اول فرض کن تمام نوشته هاتو ریختی تو یک رشته حالا چطوری بایو اونا رو دوباره به تکست باکسها بر می گردونی
مقدار داده هات اگه زیاد شد چی پاسخ اولی اینه که متن هر تکست باکس رو با یک علامتی چیزی مشخص کنی این زمانی به درد میخوره که داده های ذخیره شده رو بازیابی کنی دومابرای داده های زیاد از
using(StreamWriter sw=new StreamWriter(مکان فایل){}
استفاده کنی‎

sobhan1990
پنج شنبه 16 دی 1389, 15:51 عصر
اگر میخواید فقط یک بار تکست باکس ها را پر کنید و ذخیره کنید از استریم استفاده کن ولی اگر تعداد داده هات زیاده باید مثل کلاس ذخیره کنی.

Hossenbor
پنج شنبه 16 دی 1389, 16:42 عصر
شبحان جان میشه یک کم توضیح بدید چجوری منظورم اینه که کلاس قبلا کمپایل شده

mreza_j
پنج شنبه 16 دی 1389, 21:39 عصر
فکر کنم تازه در این زمینه کار می کنی خوب چند چیز که بلدم برات مشخص می کنم اول فرض کن تمام نوشته هاتو ریختی تو یک رشته حالا چطوری بایو اونا رو دوباره به تکست باکسها بر می گردونی
مقدار داده هات اگه زیاد شد چی پاسخ اولی اینه که متن هر تکست باکس رو با یک علامتی چیزی مشخص کنی این زمانی به درد میخوره که داده های ذخیره شده رو بازیابی کنی دومابرای داده های زیاد از
using(StreamWriter sw=new StreamWriter(مکان فایل){}
استفاده کنی‎

ببخشید منظورتو نفهمیدم ، چه جور اطلاعاتی که از تکس باکسها ریختیم تو فایل دوباره اونو به همون ترتیب و اطلاعات هر تکس باکسو درون خودش نمایش بدیم
خواهشا" اگه دوستان زحمت میکشن کد میذارن خط به خط توزیع بدن که چه ار میکنه

Babak-Magic
پنج شنبه 16 دی 1389, 23:01 عصر
سلام
یه نمونه برات درست کردم امیدوارم منظورت همین باشه

Download (http://danial-secret.persiangig.com/Babak-magic/FileRead.zip)

فقط فایل Test.txt رو در درایو C بساز

abbas.oveissi
پنج شنبه 16 دی 1389, 23:05 عصر
دوست عزیز کار زیاد سختی نیست،اگه یه جستجو میکردی هزارتا کد مختلف پیدا میکرد :چشمک: من یه برنامه خیلی خیلی ساده نوشتم و ضمیمه کردم برات . که از دو تا دکمه تشکیل شده . یه دکمه برای save کردن متن در فایل مورد نظر هست و دیگری خواندن آنها .

دکمه save :


private void save_Click(object sender, EventArgs e)
{
//میسازیم که یک آدرس میگیرد streamwrite یک شیء از
//اگر فایل در مسیری که دادیم وجود داشته باشه که روی همون
//اطلاعات رو ذخیره میکنه و اگر که نباشه،اون رو میسازه
StreamWriter sw = new StreamWriter(@"C:\text.txt");
//اطلاعات را به صورت زیر داخلش ثبت میکنیم
sw.WriteLine(textBox1.Text+"#" + textBox2.Text +"#"+ textBox3.Text +"#"+ textBox4.Text);
//ارتباط را با فایل قطع میکنیم
sw.Close();
}


دکمه open :


private void open_Click(object sender, EventArgs e)
{
//میسازیم که یک آدرس میگیرد streamreader یک شیء از
StreamReader sr = new StreamReader(@"C:\text.txt");
//خط اول آن را میخوانیم
string text= sr.ReadLine();

//چون رشیته به هم چسبیده و باید جدا شود
//با کد های دو خط زیر این کار را میکنیم
char[] splitter={'#'};
string[] array_text = text.Split(splitter);

textBox1.Text = array_text[0];
textBox2.Text = array_text[1];
textBox3.Text = array_text[2];
textBox4.Text = array_text[3];

//ارتباط با فایل را قطع میکنیم
sr.Close();
}


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

mreza_j
جمعه 17 دی 1389, 11:28 صبح
همه دوستان مرسی

ولی دوستان این برنامه ها که گذاشتید بدردم خوردن ولی یه مشکلی دارن و اون اینه که وقتی چیزی که توی تکس باکسها مینویسم جایگزین نوشته قبلی میشه و من اینو نمیخوام و میخوام این اطلاعات جدید که وارد کردم میکنم جایگذین قبلی نشه و دنباله اونا نوشته شه و بعد بتونم هرکدومو جداگونه نمایش بدم منظورم اینه که مثلا" اگه 10 بار تکس باکس ها پاک کنم و دوباره بنویسم اطلاعات قبلی توی فایل پاک نشه حالا نمیدونم درست میگم یا نه یعنی 10تا رکورد برام بسازه که شامل اطلاعات اون چهار تکس باکسیه که با هم ذخیره کردم که بعد بتونم هر چهارتا چهارتا تکس باکسو باهم نشون بدم

mreza_j
جمعه 17 دی 1389, 11:30 صبح
دوستان اگه میشه کمک کنید

abbas.oveissi
جمعه 17 دی 1389, 12:07 عصر
همه دوستان مرسی

ولی دوستان این برنامه ها که گذاشتید بدردم خوردن ولی یه مشکلی دارن و اون اینه که وقتی چیزی که توی تکس باکسها مینویسم جایگزین نوشته قبلی میشه و من اینو نمیخوام و میخوام این اطلاعات جدید که وارد کردم میکنم جایگذین قبلی نشه و دنباله اونا نوشته شه و بعد بتونم هرکدومو جداگونه نمایش بدم منظورم اینه که مثلا" اگه 10 بار تکس باکس ها پاک کنم و دوباره بنویسم اطلاعات قبلی توی فایل پاک نشه حالا نمیدونم درست میگم یا نه یعنی 10تا رکورد برام بسازه که شامل اطلاعات اون چهار تکس باکسیه که با هم ذخیره کردم که بعد بتونم هر چهارتا چهارتا تکس باکسو باهم نشون بدم

برای اینکه اطلاعات قبلی پاک نشه کافیه streamwriter رو اینگونه بنویسی :


StreamWriter sw = new StreamWriter(@"C:\text.txt",true);

اینجوری هر بار که save کنی،اطلاعات در خط جدید ذخیره میشود .

من منظورتو نفهمیدم میخوای جستجو هم بکنی توی این اطلاعات ؟؟

mreza_j
جمعه 17 دی 1389, 22:40 عصر
برای اینکه اطلاعات قبلی پاک نشه کافیه streamwriter رو اینگونه بنویسی :


StreamWriter sw = new StreamWriter(@"C:\text.txt",true);

اینجوری هر بار که save کنی،اطلاعات در خط جدید ذخیره میشود .

من منظورتو نفهمیدم میخوای جستجو هم بکنی توی این اطلاعات ؟؟



میشه گفت اره . مثلا" کاربر بخواد 10تا رکورد که ذخیره کرده بتونه یکی از رکوردهارو انتخاب کنه و باز درون تکس باکس نشونش بده.مثلا" این 4تا تکس باکس مربوط به اطلاعات یک نفر باشه که شامل نام و فامیلی و تلفن و ادرسش باشه . بعد بیام با این تکس باکس ها اطلاعات 10 نفر رو وارد کنیم بعد چه جور این اطلاعاتو یکی یکی نشون بدیم

abbas.oveissi
جمعه 17 دی 1389, 23:00 عصر
اگر کد قبلی رو داخل یک حلقه بذاری میتونی تک تک خط ها رو بخونی ، مثل زیر :


while (sr.Peek()>0)
{
string text = sr.ReadLine();
char[] splitter ={ '#' };
string[] array_text = text.Split(splitter);

textBox1.Text = array_text[0];
textBox2.Text = array_text[1];
textBox3.Text = array_text[2];
textBox4.Text = array_text[3];
}


حالا میتونی مثلا وقتی رشته رو 4 قسمت میکنی،بخش اسم رو داخل یک لیست باکس بریزی تا کاربر بتونه اسم تمام کسایی رو که ثبت شدن ببینه

mreza_j
شنبه 18 دی 1389, 13:31 عصر
مرسی دوست عزیز
1 - میشه در مورد حلقه ای که نوشتی توزیح بدی و این peek چیه که تو حلقه ازش استفاده کردی
2 - چه جور اسم رو توی لیست باکس بریزیم که بعد با کلیک روش باقی اطلاعاتو نشون بده

abbas.oveissi
شنبه 18 دی 1389, 14:50 عصر
مرسی دوست عزیز
1 - میشه در مورد حلقه ای که نوشتی توزیح بدی و این peek چیه که تو حلقه ازش استفاده کردی
2 - چه جور اسم رو توی لیست باکس بریزیم که بعد با کلیک روش باقی اطلاعاتو نشون بده

در مورد سوال اولت باید بگم این تابع چک میکنه ببینه هنوز کارکتر دیگری برای خوندن باقی هست یا نه،اگر بود حلقه ادامه پیدا کنه،هر وقت دیگه کاراکتری نمونه این تابع مقدار 1- رو بر میگردونه .

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

mreza_j
شنبه 18 دی 1389, 16:43 عصر
عزیز من با کد زیر خواستم اطلاعات تکس باکس اولمو که اسم رو توی اون وارد میکردیم بفرستم به لیست باکس
ولی کار نکرد. میخوام هر بار که اطلاعات یه نفرو وارد میکنم بعد که سیو زدم اسمش بره تو لیست باکس و پاک نشه



listBox1.Items.Add(textBox1.text)

abbas.oveissi
یک شنبه 19 دی 1389, 17:19 عصر
عزیز من با کد زیر خواستم اطلاعات تکس باکس اولمو که اسم رو توی اون وارد میکردیم بفرستم به لیست باکس
ولی کار نکرد. میخوام هر بار که اطلاعات یه نفرو وارد میکنم بعد که سیو زدم اسمش بره تو لیست باکس و پاک نشه



listBox1.Items.Add(textBox1.text)


دوست عزیز هربار شما دکمه save رو میزی اطلاعات برای همیشه توی فایل متنی ذخیره میشه،پس اطلاعات رو داری،فقط باید بیاریشون داخل برنامه.برای اینکار میتونی درون دکمه Open توی حلقه while که باعث میشه اطلاعات از فایل خوانده بشه،اون کد listbox1.items.add رو بنویسی،تا در هر دور حلقه،اسم یکی به listbox اضافه بشه .



StreamReader sr = new StreamReader(@"C:\text.txt");
//خط اول آن را میخوانیم

while (sr.Peek()>0)
{
string text = sr.ReadLine();

//چون رشیته به هم چسبیده و باید جدا شود
//با کد های دو خط زیر این کار را میکنیم
char[] splitter ={ '#' };
string[] array_text = text.Split(splitter);

textBox1.Text = array_text[0];
listBox1.Items.Add(array_text[0]);
textBox2.Text = array_text[1];
textBox3.Text = array_text[2];
textBox4.Text = array_text[3];
}
//ارتباط با فایل را قطع میکنیم
sr.Close();


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



StreamReader sr = new StreamReader(@"C:\text.txt");
while (sr.Peek() > 0)
{
string text = sr.ReadLine();

//چون رشیته به هم چسبیده و باید جدا شود
//با کد های دو خط زیر این کار را میکنیم
char[] splitter ={ '#' };
string[] array_text = text.Split(splitter);

if (array_text[0].Equals(listBox1.Text))
{
textBox1.Text = array_text[0];
textBox2.Text = array_text[1];
textBox3.Text = array_text[2];
textBox4.Text = array_text[3];
break;
}
}
sr.Close();


برات فایل رو هم ضمیمه کردم،دانلود کن ببین چه جوری کار میکنه.

mreza_j
دوشنبه 20 دی 1389, 12:48 عصر
مرسی دوست عزیز :تشویق:

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

mreza_j
سه شنبه 21 دی 1389, 19:24 عصر
سلام

من برناممو نوشتم و از کمک خیلی ممنونم ولی یه اشکالاتی داره میشه کمکم کنی با برطرفشون کنم

فایل برنامه (http://www.4shared.com/file/DX9ZsHLn/test_2.html)

MortezaGity
سه شنبه 21 دی 1389, 21:08 عصر
می تونی از token تو سی شارپ هم استفاده کنی. به این ترتیب که یک سری رشته رو با یک کاراکتر خاص که اصطلاحا بهش میگن delimiter جدا کنی و بنویسیشون تو فایل. بعد که خواستی بخونی رشته ها رو از فایلت دوباره اونا رو با delimiter جدا کن.

abbas.oveissi
سه شنبه 21 دی 1389, 21:33 عصر
سلام

من برناممو نوشتم و از کمک خیلی ممنونم ولی یه اشکالاتی داره میشه کمکم کنی با برطرفشون کنم

فایل برنامه (http://www.4shared.com/file/DX9ZsHLn/test_2.html)

ارور داد برای من نتونستم اجرا کنم،بگو مثلا کجاهاش ایراد داره،من توضیح میدم،خودت کاملش کن

f4rib0rz
سه شنبه 21 دی 1389, 22:20 عصر
یه برنامه نوشتم واسه کار با فایل واسه یکی از دوستان ببینید الگوریتم خوبی داره می تونین ادامش بدین .

. اضافه کردن یه رکورد اطلاعات به فایل
.حذف یه رکورد اطلاعات از فایل

mreza_j
چهارشنبه 22 دی 1389, 10:44 صبح
در قسمت حذف کردن یه رکورد از لیست و کلا" حذف از فایل ارور میده



using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test_2
{
public partial class Form1 : Form
{

int id = 0;

public Form1()
{
InitializeComponent();
}

private void btnsave_Click(object sender, EventArgs e)
{

try
{
id = getid();
}
catch (Exception ex)
{

}

StreamWriter sw = new StreamWriter("g:\\mr.dat",true);
sw.WriteLine(id + "#" + textBox1.Text + "#" + textBox2.Text + "#" + textBox3.Text + "#" + textBox4.Text + "#" + ";");
sw.Close();
id++;

textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";

//listBox1.Items.Add(textBox1.Text);

btnopen.Visible = true;
btnnew.Visible = true;
groupBox1.Visible = false;

if (listBox1.Visible == true)
{
this.ClientSize = new System.Drawing.Size(690, 377);
btnnew.Visible = false;
btnopen.Visible = false;
}
else
this.ClientSize = new System.Drawing.Size(690, 50);
sw.Close();
}

private void Form1_Load(object sender, EventArgs e)
{
FileInfo fi = new FileInfo("g:\\mr.dat");
if (fi.Exists)
{
}
else
{
fi.Create();
}

this.ClientSize = new System.Drawing.Size(690, 50);
}

private void btnnew_Click(object sender, EventArgs e)
{
this.ClientSize = new System.Drawing.Size(690, 377);
btndelete.Visible = false;
btnopen.Visible = false;
listBox1.Visible = false;
groupBox1.Visible = true;
btnnew.Visible = false;
groupBox2.Visible = false;
btnbastan.Visible = false;
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
groupBox2.Visible = true;
StreamReader sr = new StreamReader("g:\\mr.dat");
while (sr.Peek() > 0)
{
string text = sr.ReadLine();

char[] splitter ={ '#' };
string[] array_text = text.Split(splitter);

if (array_text[1].Equals(listBox1.Text))
{
lblname.Text = array_text[1];
lblmahsol.Text = array_text[2];
lbljaner.Text = array_text[3];
lblsal.Text = array_text[4];

textBox1.Text = array_text[1];
textBox2.Text = array_text[2];
textBox3.Text = array_text[3];
textBox4.Text = array_text[4];
break;
}
}

sr.Close();
}

private void btnopen_Click(object sender, EventArgs e)
{
this.ClientSize = new System.Drawing.Size(690, 377);
btndelete.Visible = true;
btnnew.Visible = false;
listBox1.Visible = true;
groupBox2.Visible = false;
groupBox1.Visible = false;
btnbastan.Visible = true;
btnopen.Visible = false;
listBox1.Items.Clear();
StreamReader sr = new StreamReader("g:\\mr.dat");
while (sr.Peek() > 0)
{
string test = sr.ReadLine();
char[] splitter ={ '#' };
string[] array_text = test.Split(splitter);

textBox1.Text = array_text[1];
listBox1.Items.Add(array_text[1]);
textBox2.Text = array_text[2];
textBox3.Text = array_text[3];
textBox4.Text = array_text[4];
}
sr.Close();
}

private void btnclose_Click(object sender, EventArgs e)
{
this.ClientSize = new System.Drawing.Size(690, 50);
btnopen.Visible = true;
groupBox1.Visible = false;
btnnew.Visible = true;
}

private void btnbastan_Click(object sender, EventArgs e)
{
this.ClientSize = new System.Drawing.Size(690, 50);
btndelete.Visible = false;
btnnew.Visible = true;
btnopen.Visible = true;
listBox1.Visible = false;
groupBox2.Visible = false;
}

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Application.Exit();
}

private void btnvirayesh_Click(object sender, EventArgs e)
{
groupBox1.Visible = true;
groupBox2.Visible = false;
}

private void btndelete_Click(object sender, EventArgs e)
{

listBox1.Items.Remove(listBox1.SelectedItem);


int counter = 0;
string temp = "";
StreamReader sr = new StreamReader("g:\\mr.dat");
string all = sr.ReadLine();
sr.Close();

char[] spliter ={ ';' };

string[] records = all.Split(spliter);

string index = listBox1.SelectedIndex.ToString();

StreamWriter sw = new StreamWriter("g:\\mr.dat",true);


for (int i = 0; i < records.Length - 1; i++)
{
string[] cells = records[i].Split('#');


if (cells[0] != index)
{

temp += counter + "#" + cells[1] + "#" + cells[2] + "#" + cells[3] + "#" + cells[4] + "#" + ";";
counter++;

}

}
//sw.Write("");
sw.Write(temp);
sw.Close();
sr.Close();

lblname.Text = "";
lblmahsol.Text = "";
lbljaner.Text = "";
lblsal.Text = "";

textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";



}

private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{

}








private void ShowList()
{
StreamReader sr = new StreamReader("g:\\m.txt");
string all = sr.ReadToEnd();
sr.Close();

string[] records = all.Split('+');


for (int i = 0; i < records.Length; i++)
{
string[] cells = records[i].Split(';');
try
{
listBox1.Items.Add(cells[1]);
}
catch (Exception ex)
{

}

}

}





private int getid()
{
StreamReader sr = new StreamReader("g:\\m.txt");
string all = sr.ReadToEnd();
sr.Close();
string[] records = all.Split('+');
return records.Length - 1;
}





}
}

f4rib0rz
سه شنبه 26 بهمن 1389, 12:15 عصر
اره چون واسه یکی از دوستان نوشتم و عجله ای بود اینطوری شد .
اخرش شد اینی که ضمیمه می کنم البته اون دوست عزیزمون یه جورایی کد به اون سادگی رو گرفت پیچوند که خودم وقتی خواستم بخونم اصلا متوجه نمی شدم . یه ویرایش کلی کردم . البته یه گزینه ویرایش هم گذاشته که کار نمی کنه یعنی همون کاره اضافه کردن اصلاعات رو انجام میده بعدا باز نگین ویرایش کار نمی کنه :چشمک: