【发布时间】:2018-07-07 15:32:10
【问题描述】:
我的结构是:
struct purchase_order_details{
wstring number;
wstring date;
wstring vender_code;
void Write(wofstream&);
void Read(wifstream&);
size_t totalSizeInFile;
};
以上功能实现如下:
void purchase_order_details::Write(wofstream& wofs)
{
size_t totalSize = 0;
size_t s1 = this->date.size(); totalSize += s1;
wofs.write((wchar_t*)&s1, sizeof(s1));
wofs.write( this->date.c_str() , s1 );
s1 = this->number.size(); totalSize += s1;
wofs.write((wchar_t*)&s1, sizeof(s1));
wofs.write( this->number.c_str() , s1 );
s1 = this->vender_code.size(); totalSize += s1;
wofs.write((wchar_t*)&s1, sizeof(s1));
wofs.write( this->vender_code.c_str() , s1 );
totalSizeInFile = totalSize;
}
void purchase_order_details::Read(wifstream& wifs)
{
size_t sz=0;
wifs.read((wchar_t*)&sz, sizeof(sz));
wchar_t * date = new wchar_t[sz];
wifs.read(date, sz);
this->date = date;
wifs.read((wchar_t*)&sz, sizeof(sz));
wchar_t * number = new wchar_t[sz];
wifs.read(number, sz);
this->number = number;
wifs.read((wchar_t*)&sz, sizeof(sz));
wchar_t * vcode = new wchar_t[sz];
wifs.read(vcode, sz);
this->vender_code = vcode;
delete []date;
delete []number;
delete []vcode;
}
因为我的结构包含wstring,因此我必须实现从文件中读取和写入数据的不同方法。
问题是在Read 函数wifs.read((wchar_t*)&sz, sizeof(sz)); 和另一个也是,没有从文件中读取值到变量中。
传递给这两个函数的文件是二进制文件。
为什么它没有将值读取到变量中?解决办法是什么?
提前感谢您的任何建议。
【问题讨论】:
-
做 IO 并且没有错误检查是等待发生的灾难!因此使用未初始化数据的错误。
-
我会记住这一点的谢谢@engf-010
-
由于您不是以“正常”方式读取/写入
wstring,更重要的是,因为您正在混合二进制数据,我建议您切换到ifstream/ofstreamin二进制模式。但随后您将不得不将wofs.write(date.c_str(), s1);更改为ofs.write((const char*)date.c_str(), s1 * sizeof(wchar_t));等等。此外,wchar_t date[sz];不是可移植代码,请改用wstring date; date.resize(sz);。此外,wchar_t本身不可移植,因此请考虑将字符串以 UTF-8 格式保存到文件中。 -
@RemyLebeau 仍然在发生同样的事情
-
wchar_t date[sz]有什么问题;