ذخیره کردن اطلاعات برنامه در یک فایل و بازخوانی آن!!

m_mx2009

Member
با عرض سلام و خسته نباشید به همه دوستان .
من دارم رو پروژه یک کتا ب خانه کار میکنم و میخوام که بعد از ورود اطلاعاتی از قبیل نام کتاب، ناشر، نام عضو، وضعیت مفقودی و... بتونم اون ها رو در یک فایل ذخیره کنم و با اجرای دوباره برنامه اون ها رو بازخوانی کنم یا بتونم ویرایش کنم.
اگه بلد هستید لطفا دریغ نکنید و منو راهنمایی کنید.
خیلی ممنون!:rose:
 

the_king

مدیرکل انجمن
با عرض سلام و خسته نباشید به همه دوستان .
من دارم رو پروژه یک کتا ب خانه کار میکنم و میخوام که بعد از ورود اطلاعاتی از قبیل نام کتاب، ناشر، نام عضو، وضعیت مفقودی و... بتونم اون ها رو در یک فایل ذخیره کنم و با اجرای دوباره برنامه اون ها رو بازخوانی کنم یا بتونم ویرایش کنم.
اگه بلد هستید لطفا دریغ نکنید و منو راهنمایی کنید.
خیلی ممنون!:rose:

شیوه ساده اش اینه که اول یک struct تعریف کنید که مشخصات یک کتاب رو نگهداری کنه :
کد:
struct bookinfo
{
	char title[50];
	char author[20];
	char membername[20];	
.
.
.
} book;
توجه داشته باشید که همه عناصر این struct باید طول ثابت و مشخصی داشته باشند. یعنی مثلا
عنصری را به شکل []char title تعریف نکنید، چون فقط یک اشاره گر خواهد بود و همان هم در فایل ذخیره
می شود، نه رشته ای که در آن قرار می گیرد.

برای ایجاد و باز کردن یک فایل مثل books.dat برای نوشتن می توانید از ofstream استفاده کنید :
کد:
#include <fstream>

using namespace std;

int main()
{
.
.
.
	ofstream f("books.dat", ios::binary);

و مثلا book را که از نوع struct کتاب است درون آن بنویسید :
کد:
	f.write((char *)(&book), sizeof(book));

برای باز کردن یک فایل books.dat برای خواندن می توانید از ifstream استفاده کنید :
کد:
	ifstream f("books.dat", ios::binary);

و مثلا محتویات book را از فایل بخوانید :
کد:
	f.read((char *)(&book), sizeof(book));
 

smmb

New Member
به نظرم با xml کار کنی خیلی بهتره احتمالا راحت تر هم باشه
 

m_mx2009

Member
شیوه ساده اش اینه که اول یک struct تعریف کنید که مشخصات یک کتاب رو نگهداری کنه :
کد:
struct bookinfo
{
    char title[50];
    char author[20];
    char membername[20];    
.);

سلام دوست خوبم.من متاسفانه متوجه منظورتون نشدم.
ببینید من این برنامه رو با ++C نوشتم و میخوام که با دستور کاربر مقدار تمام آرایه ها و متغیرهایی که هم در تابع main و هم درون کلاس های تعریف شده هستند را در یک فایل ذخیره کنه و در اجرای دوباره برنامه کاربر بتونه با وارد کردن مسیر فایل اطلاعات اونو باز خوانی کنه و یا ویرایششون کنه.اصلا میخوام بدونم این فایلی که فرمودید اطلاعات روش ذخیره میشه ، کجای هارد قرار میگیره؟
اگه یکم توضیح بیشتر بدید ممنون میشم.:green:
 

the_king

مدیرکل انجمن
سلام دوست خوبم.من متاسفانه متوجه منظورتون نشدم.
ببینید من این برنامه رو با ++C نوشتم و میخوام که با دستور کاربر مقدار تمام آرایه ها و متغیرهایی که هم در تابع main و هم درون کلاس های تعریف شده هستند را در یک فایل ذخیره کنه و در اجرای دوباره برنامه کاربر بتونه با وارد کردن مسیر فایل اطلاعات اونو باز خوانی کنه و یا ویرایششون کنه.اصلا میخوام بدونم این فایلی که فرمودید اطلاعات روش ذخیره میشه ، کجای هارد قرار میگیره؟
اگه یکم توضیح بیشتر بدید ممنون میشم.:green:

شما می توانید هر متغیری را در فایل بنویسید و مجددا بخوانید، فرقی نمی کند که متغیر اش در main قرار دارد
یا در داخل کلاس تعریف شده. فقط باید ترتیب متغیر هایی که می خوانید و می نویسید و طول آنها دقیقا یکسان
باشد، مثلا اگر اول متغیر x و بعد متغیر y را در فایل می نویسید، موقع خواندن هم باید اول متغیر x و بعد متغیر y
را از فایل بخوانید.

مثال نوشتن دو متغیر x و y در فایل :
کد:
	int x = 5;
	double y = 17.4;
	ofstream w("books.dat", ios::binary);
	w.write((char *)&x, sizeof(x));
	w.write((char *)&y, sizeof(y));
	w.close();

مثال خواندن دو متغیر x و y از فایل :
کد:
	int x;
	double y;
	ifstream r("books.dat", ios::binary);
	r.read((char *)&x, sizeof(x));
	r.read((char *)&y, sizeof(y));
	r.close();

توجه کنید که در مورد struct ها و آرایه ها چون اسم شان خودش یک اشاره گر است موقع ذخیره کردن یا خواندن از
فایل بعد از (char *) کاراکتر & را قرار نمی دهیم، اما در مورد متغیر های ساده مثل x و y باید آدرس متغیر را با
کاراکتر & که پیش از اسم متغیر قرار می دهیم مشخص کنیم.

مثال نوشتن دو رشته a و b در فایل :
کد:
	char a[20] = "first";
	char b[20] = "second";	
	ofstream w("books.dat", ios::binary);
	w.write((char *)a, sizeof(a));
	w.write((char *)b, sizeof(b));
	w.close();

مثال خواندن دو رشته a و b از فایل :
کد:
	char a[20];
	char b[20];
	ifstream r("books.dat", ios::binary);
	r.read((char *)a, sizeof(a));
	r.read((char *)b, sizeof(b));
	r.close();

مسیر فایل رو هم می توانید نسبی تعیین کنید و هم مسیر کامل مطلق. مثلا اگر مسیر فایل رو "books.dat"
بنویسید چون به مسیر Directory و Drive اشاره ای نکردید فایل همانجایی ایجاد می شود که کامپایلر تعیین می کند،
معمولا کنار فایل اجرایی exe برنامه ایجاد می شود :
کد:
ofstream f("books.dat", ios::binary);

اما اگر مسیر فایل رو بصورت کامل مشخص کنید، چون مسیر فایل مطلق است کاملا ثابت و مشخص خواهد بود :
کد:
ofstream f("C:\\My Folder\\books.dat", ios::binary);
 

s.1.8.1.18

New Member
سلام
directory استفاده از این کدهای فایل چیه؟
تو int main باید چی بنویسیم اگه بخوایم مشتق یک کلاس رو ذخیره کنیم؟
ممنون.
 

s.1.8.1.18

New Member
سلام آره برای اینکه بخوام از کدهای ذخیره سازی بالا استفاده کنم چه include ایی باید بنویسم؟
چون من این کد های ذخیره سازی رو نوشتم تو برنامه ام error زیاد گرفت.
تو int main() چی بنویسم برای اجرای این دستورات؟
من میخوام اشیا کلاسام ذخیره سازی بشن. باید چه کار کنم؟
 

s.1.8.1.18

New Member
سلام آره برای اینکه بخوام از کدهای ذخیره سازی بالا استفاده کنم چه include ایی باید بنویسم؟
چون من این کد های ذخیره سازی رو نوشتم تو برنامه ام error زیاد گرفت.
تو int main() چی بنویسم برای اجرای این دستورات؟
من میخوام اشیا کلاسام ذخیره سازی بشن. باید چه کار کنم؟

سلام
پیداش کردم اولش باید این رو بذارم.
کد:
#include<fstream>
ولی هنوز بلد نیستم اشیا کلاسم رو توش ذخیره کنم.
 

Monib.mohammadi

New Member
سلام.
نمیدونم تاپیک چقدر قدیمیه...
ولی من یه برنامه دفترچه تلفن همراه با ذخیره سازی توی فایل لازم دارم.
کسی داره؟؟
یا میتونه کمکم کنه؟!


ممنون میشم هرچه زودتر بهم جواب بدید.
 

Monib.mohammadi

New Member
سلام.
نمیدونم این تاپیک چقدر قدیمیه...
ولی راستش من یه برنامه دفترچه تلفن همراه با ذخیره سازی توی فایل لازم دارم.
کسی همچین برنامه ای نوشته...؟
یا میتونه کمکم کنه؟؟
این ایمیلمه : [email protected]

ممنون میشم هرچه زودتر بهم جواب بدید.
 

Monib.mohammadi

New Member
خودم یه چیزایی نوشتم،
اگه کسی فکر میکنه میتونه کمکم کنه، یه ایمیل بزنه باهاش لینک بشم و لطف کنه راهنمایی ام کنه.


زودتر،
ممنون!!
 

جدیدترین ارسال ها

بالا