FindFirst не может найти все файлы с расширением ~ 1 ~ и другими - PullRequest
1 голос
/ 06 августа 2020

SysUtils.FindFirst не может найти все файлы с расширением ~1~ и другими странными расширениями файлов, например: Unit1.dfm.~1~

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TSearchRec sr;
  int iAttributes = 0;
  StringGrid1->RowCount = 1;
  iAttributes |= faReadOnly;
  iAttributes |= faHidden;
  iAttributes |= faSysFile;
  iAttributes |= faVolumeID;
  iAttributes |= faDirectory;
  iAttributes |= faArchive;
  iAttributes |= faAnyFile;
  StringGrid1->RowCount = 0;
  if (FindFirst(Edit1->Text, iAttributes, sr) == 0)
  {
    do
    {
      if ((sr.Attr & iAttributes) == sr.Attr)
      {
        StringGrid1->RowCount = StringGrid1->RowCount + 1;
        StringGrid1->Cells[1][StringGrid1->RowCount-1] = sr.Name;
        StringGrid1->Cells[2][StringGrid1->RowCount-1] = IntToStr(sr.Size);
      }
    } while (FindNext(sr) == 0);
    FindClose(sr);
  }
}

Как заставить этот код найти все файлы с любым расширением?

1 Ответ

1 голос
/ 08 августа 2020

Следующий код отобразит все элементы в каталоге, включая файлы., ..,. ~ * - например, в папке истории проекта C ++ Builder: D

Я ввел в поле редактирования следующая строка:

C:\Users\david\Documents\Embarcadero\Studio\Projects\FindFirstVCLCpp\__history\*.*

После выполнения TMemo содержал следующее:

. = 0
.. = 0
Unit1.cpp.~1~ = 991
Unit1.cpp.~2~ = 996

Исходный код для обработчика кнопки:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TSearchRec sr;
  Memo1->Lines->Clear();
  int iAttributes = 0;
  iAttributes |= faReadOnly;
  iAttributes |= faHidden;
  iAttributes |= faSysFile;
  iAttributes |= faVolumeID;
  iAttributes |= faDirectory;
  iAttributes |= faArchive;
  iAttributes |= faAnyFile;
  if (FindFirst(Edit1->Text, iAttributes, sr) == 0)
  {
    do
    {
      if ((sr.Attr & iAttributes) == sr.Attr)
      {
        Memo1->Lines->Add(
          sr.Name
          + " = "
          + IntToStr(sr.Size)
        );
      }
    } while (FindNext(sr) == 0);
    FindClose(sr);
  }
}
...