请教一个TStringList的问题
我以下代码,是要在一个.dat文本文件中找到一个行,然后将它及其下的2行删除:
int Index;
if (OpenDialog1->Execute())
{
TStringList *pList=new TStringList;
pList->LoadFromFile("dir.dat");
pList->Sort();
if (pList->Find(OpenDialog1->FileName, Index))
{
pList->Delete(Index);
pList->Delete(Index+1);
pList->Delete(Index+2);
}
pList->SaveToFile("dir.dat");
delete pList;
}
dir.dat文件的内容如下:
E:\temp\aboutb5.bmp
3949464
F
E:\temp\Aboutb5.jpeg
3968280
F
E:\temp\JM2.jpg
3968320
F
E:\temp\B4.BAT
3968360
F
E:\temp\JM11.jpg
3952568
F
比如,OpenDialog1->FileName的值是E:\temp\JM2.jpg,应该是将
E:\temp\JM2.jpg
3968320
F
三行都删除,但事实不是,结果是只将E:\temp\JM2.jpg一行删除,而且,另存的dir.dat文件内容全变了。
如果我将这三句:
pList->Delete(Index);
pList->Delete(Index+1);
pList->Delete(Index+2);
改为:
ShowMessage(pList->Strings[Index]);
ShowMessage(pList->Strings[Index+1]);
ShowMessage(pList->Strings[Index+2]);
也只有第一行显示是正确的,其他2行显示的内容都不对。请问,这是怎么回事?有什么好的解决办法吗?
[解决办法]
应该改为
int index; TStringList *pList=new TStringList; pList->LoadFromFile("D:\\1.dat"); index=pList->IndexOf("E:\\temp\\Aboutb5.jpeg"); for(int i=0;i<3;i++) { pList->Delete(index); } //pList->Delete(index+1); //pList->Delete(index+2); pList->SaveToFile("D:\\2.dat"); delete pList;