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
 
mytbo

Registriert seit: 8. Jan 2007
482 Beiträge
 
#4

AW: Beste Methode, um "IsAbsoluteFilePathValid" narrensicher zu implementieren ?

  Alt 14. Sep 2023, 15:58
mir geht es drum, das möglichst erstmal rein am Text des FilePaths auszumachen,
ohne Seiteneffekte und sonstige "Magie", wie zum Beispiel OS-spezifische Funktionen wie "GetFullPathName" von Windows.
So richtig habe ich deine Anforderungen nicht verstanden, vielleicht so:
Delphi-Quellcode:
type
  TFileNameValidation = (fnvDirName, fnvFileName);
  TFileNameValidations = set of TFileNameValidation;

function CheckFileName(const pmcFileName: TFileName; pmValidationParts: TFileNameValidations; pmCheckedFileName: PFileName = Nil): Boolean;
var
  dirName, fileName: TFileName;
begin
  if (pmcFileName = '') or (pmValidationParts = []) then Exit(False); //=>

  Result := True;
  try
    if fnvDirName in pmValidationParts then
    begin
      dirName := TPath.GetDirectoryName(pmcFileName);
      Result := ((dirName <> '') and TPath.IsPathRooted(dirName));
    end;

    if Result
      and (fnvFileName in pmValidationParts) then
    begin
      fileName := TPath.GetFileName(pmcFileName);
      Result := ((fileName <> '') and TPath.HasValidFileNameChars(fileName, False));
    end;

    if Result
      and (pmCheckedFileName <> Nil) then
    begin
      if (dirName <> '') and (fileName <> '') then
        pmCheckedFileName^ := TPath.Combine(dirName, fileName, False)
      else if fileName <> 'then
        pmCheckedFileName^ := fileName
      else
        pmCheckedFileName^ := dirName;
    end;
  except
    Result := False;
  end;
end;

var
  fileName: TFileName;
begin
  fileName := 'C:\Dummy\Test001\Filename.txt';
  // fileName := '/private/var/mobile/Containers/Data/Application/97DD...A/tmp/Temporary.tmp';
  // fileName := '\Test001\Filename.txt';
  // fileName := '/Temporary.tmp';
  // fileName := 'Filename.txt';
  // fileName := 'C:\Dummy\Test001\';
  // fileName := 'Dummy\Test001\Template.txt';

  if CheckFileName(fileName, [fnvDirName, fnvFileName], @fileName) then
    ShowMessage(fileName);
Bis bald...
Thomas
  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 15:55 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