Entwickler-Ecke

Dateizugriff - Extension mit Wildcart prüfen?


Andre :-) - Fr 14.02.03 18:06
Titel: Extension mit Wildcart prüfen?
Hi,

ich weise einem String folgenden Wert zu:

ExtractFileExt(sFile)

Nun möchte ich prüfen, ob es ein rar file ist.


Quelltext
1:
if ExtractFileExt(sFile) = '.rar' then NewItem.ImageIndex := 3                    


Das geht. Aber ein rar kann ja auch bekanntlich mehrere Kinder haben:
r01,r02 ...

Kann mir jemand sagen, wie ich sowas prüfen kann.
Ich hatte mir was mit % überlegt, aber das geht net.

Danke


DaRkFiRe - Fr 14.02.03 21:00

Et voilà...


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function isRarExt (sFileName:STRING):BOOLEAN;
begin
  S:=ExtractFileExt(sFileName);
  IF (UPCASE(S[1]) = 'R') AND
      (S[2] IN ['0'..'9']) AND
      (S[3] IN ['0'..'9']) THEN Result:=True
  ELSE
    Result:=False;
end;


Delete - Fr 14.02.03 23:11

Man spart sich die extra Abfrage von "RAR", wenn man die auch gleich noch berücksichtigt und die Funktion entsprechend erweitert:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function isRarExt (sFileName:STRING):BOOLEAN;
begin
  S:=uppercase(ExtractFileExt(sFileName));
  IF (S[1] = 'R') AND
      (S[2] IN ['A','0'..'9']) AND
      (S[3] IN ['R','0'..'9']) THEN Result:=True
  ELSE
    Result:=False;
end;

:)


AndyB - Fr 14.02.03 23:20

Und was passiert, wenn die Extension weniger als 3 Zeichen hat? Und ihr habt beide den führenden '.' vergessen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
function isRarExt(const FileName: string): Boolean; 
var S: string;
begin
  S := LowerCase(ExtractFileExt(FileName));
  Result := (Length(S) = 4) and (S[2] = 'r') and 
            ( (S = '.rar') or ( (S[3] in ['0'..'9']) and (S[4] in ['0'..'9']) ));
end;


Delete - Sa 15.02.03 09:56

AndyB hat folgendes geschrieben:
Und was passiert, wenn die Extension weniger als 3 Zeichen hat?

Dann ist es wohl keine RAR-Endung?! :roll:


Anonymous - Sa 15.02.03 11:43

MathiasSimmack hat folgendes geschrieben:
Dann ist es wohl keine RAR-Endung?! :roll:

Dein Quelltext greift aber trotzdem auf das dritte (erste, zweite) Zeichen des Strings zu. Zudem würde die Dateiendung "RARI" (etc.) ebenfalls True ergeben und ""R0R" .. "R9R" ebenfalls.

Gruß Tom


Delete - So 16.02.03 21:14

Richtig. Da habt ihr, du und AndyB, mit eurer Kritik recht. Aber das liegt wohl daran, dass ich -wenn ich es z.B. gezielt auf RAR-Archive abgesehen habe!- die jeweilige Datei öffnen und den Header auf die RAR-Kennung prüfen würde.
Das habe ich mal bei einem schon älteren Projekt erfolgreich benutzt. Das Tool war in der Lage, mit Hilfe von separaten Microdateien diverse Archivformate zu erkennen. Sprich: es ließ sich quasi unbegrenzt erweitern.