c - Hvorfor wildcard kan ikke stå for bibliotek i FindFirstFile?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at bruge FindFirstFile for at kontrollere, om der findes nogle filer efter et mønster, men det ser ud til, at wildcard * ikke kan stå for en mappe.


int main()
{
  WIN32\_FIND\_DATAW findFileData;
  wchar\_t path[] = LR"(.**.txt)";
  HANDLE hFind = FindFirstFileW(path, &findFileData);

  if(hFind != INVALID\_HANDLE\_VALUE)
  {
    do
    {
      printf("\%S
", findFileData.cFileName);
    } while (FindNextFileW(hFind, &findFileData));
  }
}


Med dette træ er der ikke trykt noget:



.
|- foo
|  |- some.txt
|
|- bar
|  |- another.txt


Hvorfor denne begrænsning? Findes der en løsning?

Bedste reference


Vilde kort er kun tilladt i delen af ​​filnavnet efter den endelige stilseparator. Dokumentationen forklarer dette. Det siger: [5]



  Mappen eller stien og filnavnet. Filnavnet kan indeholde jokertegn, for eksempel en stjerne (*) eller et spørgsmålstegn (?).



Hvis du vil søge gennem flere mapper, skal du eksplicit gennemføre den indlejrede eller rekursive iteration.

Andre referencer 1


Som dokumentationen hedder: [6]



   filnavn kan omfatte jokertegn, for eksempel en stjerne (*) eller et spørgsmålstegn (?).



Så kun den sidste del kan have et wildcard, tidligere dele skal være eksplicitte.


Du skal implementere den funktionalitet, du ønsker i to dele: Først list alle mapper og derefter liste alle filer fra dem med wildcard.