Delphi-PRAXiS
Seite 1 von 2  1 2      

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 08: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 08: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 08: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 08: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 09: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 09: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 09: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 09: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 10: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 10: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


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Seite 1 von 2  1 2      

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