16,548
社区成员




typedef struct _st_dat
{
int nx;
float fy;
char szBuf[12];
}ST_DAT;
void MyWrite(CString strFile, const vector<ST_DAT> &vDat)
{
HANDLE hFile = CreateFile(strFile, FILE_WRITE_DATA, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return;
}
long lLen = vDat.size();
DWORD dwWrite = 0;
BOOL bRet = FALSE;
// 先定长度
// 12 是随便写的一个偏移,你可能要根据具体的要求具体写
bRet = WriteFile(hFile, &lLen, 12, &dwWrite, NULL);
// 移动文件指针
SetFilePointer(hFile, 12, NULL, FILE_BEGIN);
// 再写内容
bRet = WriteFile(hFile, &vDat, sizeof(vDat) * lLen, &dwWrite, NULL);
CloseHandle(hFile);
}
void MyRead(CString strFile, vector<ST_DAT> &vDat)
{
long lLen = 0;
HANDLE hFile = CreateFile(strFile, FILE_READ_DATA, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return;
}
BOOL bRet = 0;
DWORD dwRead = 0;
// 12 是随便写的一个偏移,你可能要根据具体的要求具体写
bRet = ReadFile(hFile, &lLen, 12, &dwRead, NULL);
vDat.resize(lLen);
SetFilePointer(hFile, 12, NULL, FILE_BEGIN);
bRet = ReadFile(hFile, &vDat, lLen * sizeof(ST_DAT), &dwRead, NULL);
CloseHandle(hFile);
}
void testmydat()
{
// TODO: 在此添加控件通知处理程序代码
// OnOK();
ST_DAT st;
st.fy = 1.23f;
st.nx = 2;
strcpy(st.szBuf, "abd");
vector<ST_DAT> vs;
vs.push_back(st);
st.fy = 2.34f;
st.nx = 99;
strcpy(st.szBuf, "xyz");
vs.push_back(st);
CString strFile = TEXT("c:/mydat.dat");
MyWrite(strFile, vs);
vector<ST_DAT> vrtest;
MyRead(strFile, vrtest);
}