C++ Builder Snippets  

Löschen älterer Dateien im Verzeichnis:
 
//-----------------------------------------------------------------------
//  Löscht älteste Dateien mit einer vorgegebenen Erweiterung aus einem
//  Verzeichnis. Die Anzahl der zu verbleibenden Dateien wird im Parameter
//  ilFilesCount vorgegeben.
//
//  Parameter:    Verzeichnisname                    als String
//                Dateinamenserweiterung             als String
//                Anzahl der verbleibenden Dateien   als int
//----------------------------------------------------------------------

void PurgeDir(AnsiString slDirName, AnsiString skFileExt,
    int ilFilesCount)
{
  TSearchRec stlSearchResult;
  TStringList* sllFileList = new TStringList;
  TStringList* sllDateList = new TStringList;
  int ilOldestItem=0int ilOldestTime=0;

  try
  {
    AnsiString skSearchDir = slDirName + AnsiString("\\*.") + skFileExt;
    if (FindFirst(skSearchDir, faAnyFile, stlSearchResult) == 0)
    {
      sllFileList -> Add(stlSearchResult.Name);
      sllDateList -> Add(stlSearchResult.Time);
    }
    while (FindNext(stlSearchResult) == 0)
    {
      sllFileList -> Add(stlSearchResult.Name);
      sllDateList -> Add(stlSearchResult.Time);
    }
    FindClose(stlSearchResult);
    while (sllFileList -> Count > ilFilesCount)
    {
      ilOldestItem = -1;     ilOldestTime = 2147483647;
      for(int ilFilePos = 0; ilFilePos < sllFileList -> Count; ilFilePos++)
      {
        if(sllDateList -> Strings[ilFilePos].
                ToIntDef(2147483647) < ilOldestTime)
        {
          ilOldestItem = ilFilePos;
          ilOldestTime = sllDateList ->
            Strings[ilFilePos].ToIntDef(2147483647);
        }
      }
      if(ilOldestItem > -1 && ilOldestItem < sllFileList -> Count)
      {
        DeleteFile(slDirName + AnsiString("\\") +
          sllFileList -> Strings[ilOldestItem]);
        sllFileList -> Delete(ilOldestItem);
        sllDateList -> Delete(ilOldestItem);
      }
    }
  }
  catch (...)
  {
    if(sllFileList) { delete sllFileList; sllFileList = 0; }
    if(sllDateList) { delete sllDateList; sllDateList = 0; }
    FindClose(stlSearchResult);
  }
}



© '99-2000 by S. Kreutzmann