A veces necesitamos saber si un nombre de archivo concuerda con una especificación de archivos (un nombre con caracteres comodines: ? y *)...

Determinando si un nombre de archivo coincide con una especificación

Copyright © 2000 Ernesto De Spirito

Storage Library - Guarde la configuración de su aplicación

MatchesSpec

A veces necesitamos saber si el nombre de un archivo concuerda con una especificación de archivos (un nombre con caracteres comodines: ? y *). Para este propósito puede usar la función MatchesMask declarada en la unidad Masks, pero aquí como un ejemplo académico y porque creemos que puede ser útil en ciertos casos (por ejemplo cuando no quiere usar conjuntos) hemos implementado una función de reemplazo que devuelve True si el archivo dado concuerda con una especificación y False en caso contrario.

uses SysUtils;

function MatchesSpec(const NomArch, Patron: string): boolean;
var
  NomP, ExtP, NomA, ExtA: string;
begin
  NomA := ExtractFileName(NomArch);
  NomP := ExtractFileName(Patron);
  ExtA := ExtractFileExt(NomA);
  ExtP := ExtractFileExt(NomP);
  SetLength(NomA, Length(NomA) - Length(ExtA));
  SetLength(NomP, Length(NomP) - Length(ExtP));
  if NomP = '' then NomP := '*';
  if ExtP = '' then ExtP := '.*';
  if ExtA = '' then ExtA := '.';
  Result := Like(NomA, NomP) and Like(ExtA, ExtP);
end;

Llamada de ejemplo

if MatchesSpec('Documento1.doc', 'DOC*.DO?') then
  ShowMessage('¡Funcionó!');
EurekaLog - Capture y registre cada excepción!