AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Beste Methode, um "IsAbsoluteFilePathValid" narrensicher zu implementieren ?
Thema durchsuchen
Ansicht
Themen-Optionen

Beste Methode, um "IsAbsoluteFilePathValid" narrensicher zu implementieren ?

Ein Thema von Rollo62 · begonnen am 14. Sep 2023 · letzter Beitrag vom 14. Sep 2023
 
Rollo62

Registriert seit: 15. Mär 2007
3.936 Beiträge
 
Delphi 12 Athens
 
#1

Beste Methode, um "IsAbsoluteFilePathValid" narrensicher zu implementieren ?

  Alt 14. Sep 2023, 08:47
Hallo zusammen,

es geht mir um die einfache und sichere Bestimmung, ob ein Pfad mit Filenamen unter allen Plattformen definiert ist,
und damit das NOCH NICHT EXISTIERENDE File mit dem Pfad direkt erreichbar (schreibbar) wäre.
Es geht mir dabei momentan nur um den Pfad-Text und nicht um reale OS-Schreibrechte.

FileExists() scheidet da aus, weil das File ja noch NICHT existieren muss.

Also als Beispiele:
Delphi-Quellcode:
  LFilePath := 'C:\Dummy\Test001\Filename.txt'; //<== JA, absoluter Pfad ist valide
  LFilePath := '/private/var/mobile/Containers/Data/Application/97DD...A/tmp/Temporary.tmp'; //<== JA, absoluter Pfad ist valide
  LFilePath := '\Test001\Filename.txt'; //<== NEIN, der absoluter Pfad ist nicht valide beschreibbar ( ODER DOCH )
  LFilePath := '/Temporary.tmp'; //<== NEIN, der absolute Pfad ist nicht valide beschreibbar ( ODER DOCH )
  LFilePath := 'Filename.txt'; //<== NEIN, der absoluter Pfad ist nicht valide beschreibbar ( ODER DOCH )
  LFilePath := 'C:\Dummy\Test001\'; //<== NEIN, das ist kein Pfad mit Filename
  LFilePath := 'Dummy\Test001\Template.txt'; //<== NEIN, der absoluter Pfad ist nicht valide beschreibbar ( ODER DOCH )
Da spielt die Frage, ob absoluter oder relativer Pfad mit rein, also
- komplette, "absolute" Pfade sind nach meiner Definition IMMER valide beschreibbar,
- während relative Pfade valide sein können, meiner Meinung nach,
aber nicht zwingend valide sein müssen (wenn sie nicht in absolute Pfade aufgelöst werden können)

Es gibt dazu verschiedene Funktionen in System.SysUtils, System.IOUtils, z.B:
ExtractFilePath
ExtractFileName
ExpandFileName
TPath.GetFullPath
TPath.IsRelativePath
usw.


Mein bisheriger Favorit sieht sinngemäß so aus:
Delphi-Quellcode:
/ AFilePath - Enthält Path und Filename
function IsAbsoluteFilePathValid( const AFilePath ) : Boolean;
begin
    Result := False;

    if ExtractFilePath( TPath.GetFullPath( AFilePath ) ) <> 'then
    begin
         
        if ExtractFileName( AFilePath ) <> 'then
        begin
            //OK, the FilePath contains both FileDirectory and FileName parts (is therefor considered as valid )
            Result := True;
        end;

     end;
und schaut einfach, ob es Pfad-Anteil und File-Anteil im FilePath gibt.
Allerdings könnte der Pfad-Anteil relativ sein und damit NICHT immer in dem Sinne valide, wie ich mir das vorstelle.

Vielleicht reicht aber auch einfach ein ExpandFileName() aus, um die Pfad-Frage immer narrensicher aufzulösen.

Auch die Namensgebung ist diskutabel, statt
function IsAbsoluteFilePathValid( const AFilePath ) : Boolean; könnte auch
function IsFilePathWriteable( const AFilePath ) : Boolean; gut passen.

Ist aber etwas irreführend, weil es mir dabei momentan nicht um die Zugriffsrechte geht.
Also, ist das besser ?
function IsFilePathAccessible( const AFilePath ) : Boolean; Ich würde gerne das moderne System.IOUtils dafür nutzen, aber anscheinend kommt man um System.SysUtils nicht immer herum.

Wie seht ihr das, gibt es da überhaupt eine "optimale" Version, die alle Fälle abdeckt ?
  Mit Zitat antworten Zitat
 


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 22:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz