求高人帮助,有关文件的读取和指针操作问题?
amiao 2003-10-15 12:28:35 求高人帮助,为什么读出来的cpyfilelist是空啊?
解决了问题,再加分......
//记录结构件-----------------------------------------------------------------
typedef struct
{
char oldver[10];
char newver[10];
int cpyfilenum;
PBuf cpyfilelist;
int delfilenum;
char datetime[20];
char netpath[200];
}FileHistory;
typedef FileHistory *PFileHistory;
//写入文件-------------------------------------------------------------------
TList *recordlist;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PFileHistory pszBuffer = new FileHistory;
AnsiString sPath = ExtractFilePath(Application->ExeName) + "UpdMng.dat";
StrCopy(pszBuffer->oldver, "1.0.0003");
StrCopy(pszBuffer->newver, "1.0.0004");
StrCopy(pszBuffer->datetime, AnsiString(Now()).c_str());
StrCopy(pszBuffer->netpath, "F:\\share\\");
pszBuffer->delfilenum = 3;
pszBuffer->cpyfilenum = 3;
pszBuffer->cpyfilelist = new Buf[pszBuffer->cpyfilenum];
AnsiString sTemp;
for (int i=0; i<pszBuffer->cpyfilenum; i++)
{
sTemp = "F:\\share\\" + AnsiString(i+1) + ".txt";
StrCopy(pszBuffer->cpyfilelist[i], sTemp.c_str());
}
int iFileHandle = FileOpen(sPath, fmOpenReadWrite);
if (iFileHandle != -1)
{
int iSize = sizeof(FileHistory) + pszBuffer->cpyfilenum * MaxLen;
FileSeek(iFileHandle, 0, 2);
FileWrite(iFileHandle, (char *)pszBuffer, iSize);
}
FileClose(iFileHandle);
delete [] pszBuffer->cpyfilelist;
delete [] pszBuffer;
}
//---------------------------------------------------------------------------
//从文件读取-----------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PFileHistory pszBuffer = new FileHistory;
AnsiString sPath = ExtractFilePath(Application->ExeName) + "UpdMng.dat";
int iFileHandle = FileOpen(sPath, fmOpenRead);
if (iFileHandle != -1)
{
int iFileLength = FileSeek(iFileHandle, 0, 2);
FileSeek(iFileHandle, 0, 0);
PFileHistory pTemp;
int iSize = iFileLength;
int StructSize;
while (iSize >= sizeof(FileHistory))
{
pTemp = new FileHistory;
pTemp->cpyfilelist = new Buf[3];
StructSize = sizeof(FileHistory) + 3*MaxLen;
iSize = FileRead(iFileHandle, (char *)pTemp, StructSize);
if (iSize > 0) recordlist->Add(pTemp);
else
{
delete [] pTemp->cpyfilelist;
delete [] pTemp;
}
}
}
FileClose(iFileHandle);
if (recordlist->Count > 0)
{
Memo1->Lines->Clear();
int j;
for (int i=0; i<recordlist->Count; i++)
{
pszBuffer = (FileHistory *)recordlist->Items[i];
Memo1->Lines->Add(pszBuffer->oldver);
Memo1->Lines->Add(pszBuffer->newver);
Memo1->Lines->Add(pszBuffer->cpyfilenum);
Memo1->Lines->Add(pszBuffer->delfilenum);
Memo1->Lines->Add(pszBuffer->netpath);
Memo1->Lines->Add(pszBuffer->datetime);
for (j=0; j<pszBuffer->cpyfilenum; j++)
Memo1->Lines->Add(pszBuffer->cpyfilelist[j]);
Memo1->Lines->Add("--------------------------------------");
}
}
delete [] pszBuffer;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
recordlist = new TList;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
PFileHistory temp = new FileHistory;
for (int i=0; i<recordlist->Count; i++)
{
temp = (PFileHistory) recordlist->Items[i];
delete [] temp;
}
delete recordlist;
}
//---------------------------------------------------------------------------