读书人

请问一个TStringList的有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

请教一个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行显示的内容都不对。请问,这是怎么回事?有什么好的解决办法吗?




[解决办法]
应该改为

C/C++ code
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; 

读书人网 >C++ Builder

热点推荐