Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Pfad zur Datei aus URL extrahieren (https://www.delphipraxis.net/198072-pfad-zur-datei-aus-url-extrahieren.html)

EWeiss 2. Okt 2018 09:26

Pfad zur Datei aus URL extrahieren
 
Hat jemand ein Sample wie ich aus einer LNK Datei *.url den Pfad zur Video Datei extrahieren kann?
Einfache Funktion sollte reichen. :)

Hab mit Internet noch nicht viel gemacht.

gruss

KodeZwerg 2. Okt 2018 09:43

AW: Pfad zur Datei aus URL extrahieren
 
ist .url nicht nur ne text datei?
also nach "url=" suchen, und den rest dahinter nehmen.
vielleicht als ini datei mit key url?

Delphi.Narium 2. Okt 2018 09:45

AW: Pfad zur Datei aus URL extrahieren
 
Quelltext hab' ich nicht parat, aber:

http:// bzw. https:// durch 'nen Laufwerksbuchstaben ersetzen.
Dann mit ExtractFilePath den Pfad entnehmen, ExtractFileName gibt den Dateinamen.

Ungefähr sowas:
Delphi-Quellcode:
url  := AnsiReplaceText(url,'http://','c:\');
url  := AnsiReplaceText(url,'https://','c:\');
// ggfls. / nach \ übersetzen.
url  := AnsiReplaceText(url,'/','\');
Pfad := ExtractFilePath(url);
Datei := ExtractFileName(url);

DieDolly 2. Okt 2018 09:49

AW: Pfad zur Datei aus URL extrahieren
 
Ich würde es vielleicht mit einer StringListe machen

Delphi-Quellcode:
if FileExists(url datei) then
begin
 sl := TStringList.Create;
 try
  sl.LoadFromFile(url datei);

  if sl.Count > 0
   begin
    for i := 0 to sl.Count - 1 do
     begin
      if Pos('url=', sl.Strings[i]) > -1 then
       begin
        showmessage( Copy(sl.Strings[i], Pos('=', sl.Strings[i]) + 1, Length(sl.Strings[i])) );
       end;
     end;
   end;
 finally
  sl.Free;
 end;
end;
Optmieren mit Zwischenvariablen usw kann jeder selber.

EWeiss 2. Okt 2018 10:07

AW: Pfad zur Datei aus URL extrahieren
 
Zitat:

Zitat von DieDolly (Beitrag 1414645)
Ich würde es vielleicht mit einer StringListe machen

Delphi-Quellcode:
if FileExists(url datei) then
begin
 sl := TStringList.Create;
 try
  sl.LoadFromFile(url datei);

  if sl.Count > 0
   begin
    for i := 0 to sl.Count - 1 do
     begin
      if Pos('url=', sl.Strings[i]) > -1 then
       begin
        showmessage( Copy(sl.Strings[i], Pos('=', sl.Strings[i]) + 1, Length(sl.Strings[i])) );
       end;
     end;
   end;
 finally
  sl.Free;
 end;
end;

Danke :)
Mit kleiner Änderung geht es. (Muss nur noch das Caption ändern ist aber kein Problem)
Delphi-Quellcode:
            if Extension = '.url' then
            begin
              sl := TStringList.Create;
              try
                sl.LoadFromFile(FileName);

                if sl.Count > 0 then
                begin
                  for IntI := 0 to sl.Count - 1 do
                  begin
                   if InStr(lowercase(sl.Strings[IntI]), 'url=') = 1 then
                   begin
                   FileName := Copy(sl.Strings[IntI], Pos('=', sl.Strings[IntI]) + 1,
                     Length(sl.Strings[IntI]));
                     break;
                   end;
                  end;
                end;
              finally
                sl.Free;
              end;
            end;
Ich hätte jetzt meine riesen Unit (7KB) eingebunden damit wäre es auch gegangen da hier schon alles vorbereitet war. (Siehe OTTB uFileRelated)
So geht es aber schneller. ;)

gruss

DieDolly 2. Okt 2018 10:36

AW: Pfad zur Datei aus URL extrahieren
 
Ich würde zusätzlich noch auf
Delphi-Quellcode:
FileExists
prüfen, denn sonst gibt das eine hässliche Fehlermeldung bzw einen unnötigen Eintrag im Log falls es einen gibt.

EWeiss 2. Okt 2018 10:43

AW: Pfad zur Datei aus URL extrahieren
 
Zitat:

Zitat von DieDolly (Beitrag 1414653)
Ich würde zusätzlich noch auf
Delphi-Quellcode:
FileExists
prüfen, denn sonst gibt das eine hässliche Fehlermeldung bzw einen unnötigen Eintrag im Log falls es einen gibt.

Es ist ja eine Verknüpfung..
Wenn die Datei auf dem Server nicht mehr existiert wird sie nicht abgespielt im weiteren verlauf.
Bei lokalen Dateien gebe ich dir recht!

gruss

himitsu 2. Okt 2018 10:55

AW: Pfad zur Datei aus URL extrahieren
 
Erstmal, das ist eine INI und keine StringListe, also warum nicht wie eine INI behandeln?
Und selbst wenn als StringList, dann kann man sich das manuelle Durchsuchen sparen, denn
Delphi-Quellcode:
SL.NameValueSeparator := '='; SL.Values['url'] = dieURL;
(wenn/da es nur das eine "url" in dieser einen Gruppe gibt).

Und es sollte eigentlich auch eine WinAPI für den Zugriff geben (es gibt auch binäre Formate, wie z.B. .lnk), aber mir fällt grade nicht ein wo diese API sich versteckt.

DieDolly 2. Okt 2018 11:03

AW: Pfad zur Datei aus URL extrahieren
 
EWeiss, lösch meinen Code am besten. Der scheint ja absoluter Mist zu sein :roll:

EWeiss 2. Okt 2018 11:08

AW: Pfad zur Datei aus URL extrahieren
 
Zitat:

Zitat von DieDolly (Beitrag 1414660)
EWeiss, lösch meinen Code am besten. Der scheint ja absoluter Mist zu sein :roll:

Warum funktioniert einwandfrei wenn SL als TStringList definiert ist.
Meine Videos laufen! UHD direkt aus dem Internet ohne zu speichern.

Zitat:

es gibt auch binäre Formate, wie z.B. .lnk
Habe ich schon fertig *.lnk NUR das will ich nicht zu viel Code und absolut nicht nötig.
Das Sample von @DieDolly ist dafür vollkommen ausreichend.

Zitat:

aber mir fällt grade nicht ein wo diese API sich versteckt
ShellApi

Und hier ein Sample!
Delphi-Quellcode:
procedure TWebShortCut.LoadInternetShortCut;
// Loads information for internet shortcut (*.URL) from FileName and Location.
  var
    inifile: TIniFile;
    psfi: TSHFileInfo;
  begin
    ClearValues;
    iniFile := TIniFile.Create(GetLocationFolder);
    try
      fURL := iniFile.ReadString('InternetShortcut', 'URL', '');
      fHotKey := iniFile.ReadInteger('InternetShortcut', 'Hotkey', 0);
      HotKeyToShortCut(FHotKey, FHotKeyCtrl);
      fIconPath := iniFile.ReadString('InternetShortcut', 'IconFile', '');
      fIconIndex := iniFile.ReadInteger('InternetShortcut', 'IconIndex', 0);
    finally
      inifile.free;
    end;
    // load icon into TIcon if one is available.
    if FIconPath = '' then
      begin
        SHGetFileInfo(PChar(fURL), 0, psfi, sizeof(psfi), SHGFI_ICON);
        FIcon.Handle := psfi.hIcon;
      end
    else
      FIcon.Handle := ExtractIcon(hInstance, PChar(FIconPath), FIconIndex);
  end;
Aber wie gesagt ich will meine TWebShortCut Classe dafür nicht einbinden.

gruss

KodeZwerg 2. Okt 2018 20:54

AW: Pfad zur Datei aus URL extrahieren
 
Hi, auch wenn Thema bereits abgeschlossen ist, ich finds gut das ihr meinen Vorschlag das als Text reinzulesen und nach "url=" zu Suchen genommen habt, rein auf die Masse (also Anwender die ein Produkt nutzen) betrachtet wäre das .ini Beispiel das einzig wahre.

EWeiss 2. Okt 2018 21:54

AW: Pfad zur Datei aus URL extrahieren
 
Zitat:

Zitat von KodeZwerg (Beitrag 1414713)
Hi, auch wenn Thema bereits abgeschlossen ist, ich finds gut das ihr meinen Vorschlag das als Text reinzulesen und nach "url=" zu Suchen genommen habt, rein auf die Masse (also Anwender die ein Produkt nutzen) betrachtet wäre das .ini Beispiel das einzig wahre.

Hast du mein Sample gesehen das ist INI aber ich will es nicht.
Der Ansatz von @DieDolly läuft und fedisch!

PS:
Es bringt mir nichts eine Classe einzubinden (ja fertig von OTTB alles schon gehabt) wenn ich das mit 10 Zeilen Code erledigen kann bei einem einmaligen Aufruf.

gruss

KodeZwerg 2. Okt 2018 23:23

AW: Pfad zur Datei aus URL extrahieren
 
Ja ich habe dein .ini gesehen, das war ja auch meine Meinung dazu, ich fand das gut, nicht mehr nicht weniger, solange Du glücklich bist ist doch alles in Butter, egal wie man Ziel erreicht :-D

Für System-Registrierung hatte ich mir mal die WinApi dafür selbst gekapselt um, für damalige Verhältnisse wars halt wichtig, Platz zu sparen, mit der Delphi Registry.pas waren es glaube ich 350kb mehr .exe Größe die ich mir per WinApi gespart habe.
Kann man bestimmt auch für Ini-Dateien so machen, Du bist ja bereits happy, ich selbst setz das mal auf meine ToDo ;)

edit
ps: ich habe auch per duckduckgo ein total krasses delphi beispiel gefunden was vom aussehen her dem code eines binären link files entstammt, aber der war riesen gross, plus unformatiert, hatte mir das nicht näher angeschaut, aber man wird fündig wenn man buddelt

Grüße

EWeiss 2. Okt 2018 23:31

AW: Pfad zur Datei aus URL extrahieren
 
Zitat:

Du bist ja bereits happy, ich selbst setz das mal auf meine ToDo
Kannst du gerne tun.

Mein Problem mit dem Teil ist halt das diese Funktion an einer Classe gekapselt ist und es nur richtig funktioniert wenn ich die gesamte Unit mit einbinde.
Das ist mir aber zu viel 14K zusätzlichen Code für eine Abfrage im gesamten Projekt.

Siehe OTTB uIShellItem.pas
So das ist der einzige Grund warum ich die Frage gestellt habe ob es auch mit weniger Code geht ;)

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz