Autor Beitrag
Andre :-)
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Fr 14.02.03 18:06 
Hi,

ich weise einem String folgenden Wert zu:

ExtractFileExt(sFile)

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

ausblenden 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

_________________
Security is just a feeling, but never reality
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: Fr 14.02.03 21:00 
Et voilà...

ausblenden 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;

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

ausblenden 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;

_________________
Ist Zeit wirklich Geld?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.