AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden ob eine Datei existiert

Ein Thema von JimmyB · begonnen am 23. Sep 2022 · letzter Beitrag vom 26. Sep 2022
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Herausfinden ob eine Datei existiert

  Alt 24. Sep 2022, 18:17
Ich habe mal spaßenshalber 2 checkboxen auf eine form geknallt und folgendes erfolgreich ausprobiert, damit solltest du voran kommen wenn du meiner logik folgen kannst:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  Component: TComponent;
begin
  for I := 1 to 2 do
    begin
      Component := FindComponent('CheckBox' + IntToStr(I));
      if ((Component <> nil) and (Component is TCheckBox)) then
        TCheckBox(Component).Caption := 'Text ' + IntToStr(I);
    end;
end;
Viel Spass damit!
Gruß vom KodeZwerg

Geändert von KodeZwerg (24. Sep 2022 um 18:32 Uhr) Grund: ohne rtti geht es auch :-D
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
711 Beiträge
 
Delphi 12 Athens
 
#2

AW: Herausfinden ob eine Datei existiert

  Alt 24. Sep 2022, 18:46
Eine andere Variante mit 3 bereits vorhandenen Checkboxen, einem OpenDialog, einem Memo als visuelle Kontrolle für den Textinhalt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sListe : TStringList;
  iZaehler : Integer;

begin
  if OpenDialog1.Execute
  then begin
    if FileExists(OpenDialog1.FileName)
    then begin
      sListe := TStringList.Create;
      sListe.LoadFromFile(OpenDialog1.FileName);

      // Ausgabe im Memo
      iZaehler := 1;
      repeat
        memo1.Lines.Add(sListe[iZaehler - 1]);
        inc(iZaehler);
      until iZaehler > sListe.Count;

      // Ausgabe via Checkbox
      iZaehler := 1;
      repeat
        TCheckBox(FindComponent('Checkbox' + IntToStr(iZaehler))).Caption := sListe[iZaehler - 1];
        inc(iZaehler);
      until iZaehler > sListe.Count;
    end
    else raise Exception.Create('Die Datei existiert nicht.');
  end;
end;
Um das ganze (Datei-) Handling zu vereinfachen, setze ich eine eine TStringList ein.
Allerdings beginnt deren Index bei Null, daher auch sListe[iZaehler - 1];
Roland

Geändert von blawen (24. Sep 2022 um 18:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Herausfinden ob eine Datei existiert

  Alt 24. Sep 2022, 18:55
hab mal was gekürzt
Delphi-Quellcode:
  if ((OpenDialog1.Execute) and (FileExists(OpenDialog1.FileName))) then
    begin
Geht bestimmt noch kürzer (FileMustExist)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
711 Beiträge
 
Delphi 12 Athens
 
#4

AW: Herausfinden ob eine Datei existiert

  Alt 24. Sep 2022, 20:20
hab mal was gekürzt
Delphi-Quellcode:
  if ((OpenDialog1.Execute) and (FileExists(OpenDialog1.FileName))) then
    begin
Geht bestimmt noch kürzer (FileMustExist)
und auch "richtiger" - die Stringliste sollte auch wieder freigegeben werden
FileExists müsste vermutlich nicht eingesetzt werden, da eigentlich nur eine existierende Datei per OpenDialog ausgewählt werden kann.
Aber wenn JimmyB die Datei direkt aufrufen möchte, ist es zu empfehlen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sListe : TStringList;
  iZaehler : Integer;

begin
  if (OpenDialog1.Execute)
      and (FileExists(OpenDialog1.FileName))
  then begin
    sListe := TStringList.Create;
    try
      sListe.LoadFromFile(OpenDialog1.FileName);

      iZaehler := 1;
      repeat
        TCheckBox(FindComponent('Checkbox' + IntToStr(iZaehler))).Caption := sListe[iZaehler - 1];
        inc(iZaehler);
      until iZaehler > sListe.Count;
    finally
      sListe.Free;
    end;
  end;
end;
Roland
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.588 Beiträge
 
Delphi 12 Athens
 
#5

AW: Herausfinden ob eine Datei existiert

  Alt 24. Sep 2022, 20:42
Warum Repeat mit Variablelenrumgefummel und nicht einfach ein For, wo die Anzahl doch feststeht?

Und wer in die Options schaut, wird erkennen, dass man den Dialog so einstellen kann dass er nur existierende Dateien zurückgibt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
989 Beiträge
 
Delphi 6 Professional
 
#6

AW: Herausfinden ob eine Datei existiert

  Alt 25. Sep 2022, 08:40
Hmm...

hab mal was gekürzt

Geht bestimmt noch kürzer (FileMustExist)
und auch "richtiger" - die Stringliste sollte auch wieder freigegeben werden
FileExists müsste vermutlich nicht eingesetzt werden, da eigentlich nur eine existierende Datei per OpenDialog ausgewählt werden kann.
Zum Einen hat der OpenDialog (zu mindestens in D6) ein Option 'ofFileMustExist'...
Zum Anderen 'ofAllowMultiSelect' wodurch mehr wie eine Datei ausgewählt werden kann und dann über OpenDialog1.Files aufgelistet werden.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#7

AW: Herausfinden ob eine Datei existiert

  Alt 26. Sep 2022, 11:45
Grundsätzlich muss man auch beachten, dass FilExists leider unter Windows mglw. nicht korrekt True bzw. False, sondern 1 -1 bzw. 0 zurückliefert. Das hatte ich auch schonmal, deshalb am besten "not FileExists(...)" anstelle von "FileExists(...) = False" verwenden.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.588 Beiträge
 
Delphi 12 Athens
 
#8

AW: Herausfinden ob eine Datei existiert

  Alt 26. Sep 2022, 12:16
Gut, =False wird immer funktionieren, da es nur EIN False gibt,
aber =True fängt schon damit an, dass es -1, 1 oder bis zu 2 Milliarden andere Werte sein kann, aber die Konstante "True" nur einen Wert davon hat (im Delphi Boolean = 1 Byte ... im C++ oft 4 Byte signed oder auch ein 1 BYTE oder 1 SHORT oder 2 Byte oder ...)

also besser garnicht erst machen




Hier ist aber das Problem, dass "kann auf Verzeichnis nicht zugreifen und somit keine Dateien finden" auch als "existiert nicht" angesehn wird.
Es gibt halt nur JA und NEIN, aber kein VIELLEICHT.

Dafür könnte man entweder im FileExist eine Exception werfen, wenn es "Fehler" gibt, aber dieses Verhalten wäre jetzt nicht so toll, wenn es plötzlich knallen könnte,
also eine neue Funktionen ala "FileAccessCheck", welche z.B. einen Enum zurück gibt, mit Existiert, ExistiertReadOnly, ExistiertAberWederLeseNochSchreibzugriff ZugriffVerweigert, DateiExistiertNicht, VerzeichnisExistiertNicht, PfadUngültig, VielleichtNochwasDasMirGradeNichtEinfällt
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Sep 2022 um 12:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz