第二次打开文件无法写入。。。

zhangwh1991 2011-06-01 04:09:08

const Book mark = {"0","0","0","0","0","0"}; //empty record
const char* bookDat = "D:\\book.dat";
bool flag = true;

void adminWidget::Initial()
{

QMessageBox box;
box.setWindowTitle("Warning");
box.setIcon(QMessageBox::Warning);
box.setText("If data file exists , it will delete original data.\nContinue ?");
box.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
if(box.exec() == QMessageBox::Yes)
{
ofstream bdat(bookDat,ios::out | ios::binary);
if(!bdat)
{
QMessageBox::warning(this,tr("Warning"),tr("The file does not exist!"),QMessageBox::Yes);
flag = false;
return;
}
bdat.seekp(0, ios::beg);
bdat.write((char*) & mark, sizeof(Book));
bdat.close();
}
}
void adminWidget::Append()
{
Book book;
fstream bdat(bookDat,ios::in | ios::out | ios::binary);
if(!bdat)
{
QMessageBox::warning(this,tr("Warning"),tr("The file does not exist!"),QMessageBox::Yes);
return;
}
bdat.seekg(0,ios::beg);
do
{
bdat.read((char*)&book,sizeof(Book));
}while(!endMark(book));
bdat.seekp(-long(sizeof(Book)),ios::cur);
book.number = ui->bookNum->text();
book.bookName = ui->bookName->text();
book.Author = ui->Author->text();
book.publish_company = ui->publishingCom->text();
book.quantity = ui->bookQuantity->text();
book.price = ui->price->text();
bdat.write((char*)&book,sizeof(Book));
bdat.write((char* )&mark,sizeof(Book));
bdat.close();
}


先调用Initial()初始化文件,可正常调用Append()写文件。。第二次开始就不必调用Initial(),直接调用Append()。。。出错了。。为什么?哪里有问题?望指教!
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-06-01
  • 打赏
  • 举报
回复
第二次打开进
QMessageBox::warning(this,tr("Warning"),tr("The file does not exist!"),QMessageBox::Yes);
这句么??

wfq0987 2011-06-01
  • 打赏
  • 举报
回复
Initial()和Append()之间没有哦什么因果联系啊
bdmh 2011-06-01
  • 打赏
  • 举报
回复
那跟踪啊,很可能出在while循环,因为到了末尾时,并不是立即就知道已经到末尾了,是需要再次读取一下,才知道
就想叫yoko 2011-06-01
  • 打赏
  • 举报
回复
出的什么错呢
会不会是bookDat字符串改变了

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧