ورود

View Full Version : ویرایش فایل ایجاد شده با fstream



Mahyaa
چهارشنبه 11 بهمن 1385, 18:24 عصر
سلام
یک برنامه دارم مینویسم که از فایل به عنوان دیتابیسش استفاده میکنه . یک کلاس توی این برنامه هست که خودش رو توی فایل مینویسه . طبق معمول هم یک سری متدهای Add و Display و ... توی این کلاس دارم که برای اضافه کردن رکورد به فایل و نمایش و ... هست .
مشکل من با متد Edit هستش .یعنی میخوام یکی از رکوردهایی رو که قبلا توی فایل نوشته بودم ، ویرایش کنم . من کد رو یک چیزی شبیه به این نوشتم که اشکال داره . یعنی نمیتونم حالیش کنم که فایل رو با اطلاعاتی که درش وجود داره ، باز کن و Position رو ببر اونجایی که میگم و حالا جای اوین رکورد اینی که من میگم رو بنویس .
در ضمن از fstream استفاده میکنم .

ممنون میشم اگر بتونید راهنمایی کنید.

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


void TMyClass::OverwriteInFile(int RecordIndex)
{
ofstream OutFile;
OutFile.open(MY_FILE_NAME , ios::out | ios::binary);
OutFile.seekp(RecordIndex * sizeof(TMyClass));
OutFile.write((char *)this , sizeof(*this));
OutFile.close();
}

mzjahromi
چهارشنبه 11 بهمن 1385, 20:59 عصر
این خط رو این شکلی بنویسید


OutFile.open(MY_FILE_NAME , ios::out | ios::binary|ios::nocreate);

Mahyaa
چهارشنبه 11 بهمن 1385, 23:01 عصر
ممنون
به نظر میاد در استاندارد جدید از nocreate پشتیبانی نمیشه . (http://www.devx.com/tips/Tip/13611)

آیا جایگزینی داره ؟ یا راهی برای شبیه سازی ؟

Mahyaa
پنج شنبه 12 بهمن 1385, 13:38 عصر
حل شد به این شکل :


OutFile.open(MY_FILE_NAME , ios::in| ios::out | ios::binary);

روح اله معینی زاده
شنبه 14 بهمن 1385, 13:31 عصر
سلام
ببخشید که فضولی می کنم
من وی‌بی کارم و البته به خاطر دروس دانشگاهی مجبور شدم از سی (که برنامه جالبی به نظر رسید البته تا حدودی) استفاده کنم
فکر کنم بتونی با ios::app به معنای اضافه کردن یا append استفاده کنی
خدانگهدار

Mahyaa
شنبه 14 بهمن 1385, 14:49 عصر
فکر کنم بتونی با ios::app به معنای اضافه کردن یا append استفاده کنی

Append به انتهای فایل ، اضافه میکنه .من میخواستم یکی از رکوردهایی رو که قبلا در فایل نوشته بودم دوباره نویسی کنم .
همونطور که در پست 4 گفتم ، با این ترکیب از open mode مشکل حل شد .

مرسی :)