سلام دوست خوبم.من متاسفانه متوجه منظورتون نشدم.
ببینید من این برنامه رو با ++C نوشتم و میخوام که با دستور کاربر مقدار تمام آرایه ها و متغیرهایی که هم در تابع main و هم درون کلاس های تعریف شده هستند را در یک فایل ذخیره کنه و در اجرای دوباره برنامه کاربر بتونه با وارد کردن مسیر فایل اطلاعات اونو باز خوانی کنه و یا ویرایششون کنه.اصلا میخوام بدونم این فایلی که فرمودید اطلاعات روش ذخیره میشه ، کجای هارد قرار میگیره؟
اگه یکم توضیح بیشتر بدید ممنون میشم.
شما می توانید هر متغیری را در فایل بنویسید و مجددا بخوانید، فرقی نمی کند که متغیر اش در 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);