Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Existiert Datei? (https://www.delphipraxis.net/64518-existiert-datei.html)

Angel4585 4. Mär 2006 15:54


Existiert Datei?
 
Hallo,

wie kann ich rausfinden ob die Datei http://localhost/test.txt existiert?

MfG

:angel:

PierreB 4. Mär 2006 15:55

Re: Existiert Datei?
 
Hier im Forum suchenFileExists und deine Delphi-Hilfe.

Sharky 4. Mär 2006 15:57

Re: Existiert Datei?
 
Zitat:

Zitat von PierreB
Hier im Forum suchenFileExists und deine Delphi-Hilfe.

FileExists funktioniert auch beim Zugriff auf eine URL im Internet :?:

PierreB 4. Mär 2006 16:00

Re: Existiert Datei?
 
Hab keinen Apache gerade zur Hand, wenn sich die Datei aber im www-Root des Webservers (also localhost oder 127.0.0.1) befindet warum sollte es nicht gehen ? :?:

Angel4585 4. Mär 2006 16:01

Re: Existiert Datei?
 
Heavy.. cool :thumb: danke

marabu 4. Mär 2006 16:14

Re: Existiert Datei?
 
Einfach nur FileExists?

Vorher muss die Konfigurationsdatei des HTTP Servers untersucht werden. Das zum URL passende virtuelle Verzeichnis (oder rootdir) muss ausfindig gemacht werden. Apache, Sambar, PWS, IIS? Jeder Server verlangt da eine andere Vorgehensweise. Das wird schon etwas teurer als ein simpler Aufruf von FileExists.

Eine Alternative könnte UrlExists() sein: klick

Grüße vom marabu

PierreB 4. Mär 2006 16:18

Re: Existiert Datei?
 
Zitat:

Vorher muss die Konfigurationsdatei des HTTP Servers untersucht werden.
Warum ?

Wenn ich "http://127.0.0.1/test.txt" in den Explorer eingebe zeigt er mir die Datei an. Warum sollte FileExists das nicht auch einfach können bzw. zurückgeben ob die Datei vorhanden ist ?

mirage228 4. Mär 2006 16:21

Re: Existiert Datei?
 
Hi,

die Funktion FileExists gibt bei mir für Dateien auf localhost False zurück.
Also der Windows Explorer ist sehr eng mit dem Inernet Explorer verbunden, da wird einem viel Arbeit im Hintergrund abgenommen. Windows erkennt wohl, dass es eine URL ist und handelt dementsprechend.

mfG
mirage228

PierreB 4. Mär 2006 16:25

Re: Existiert Datei?
 
Ok, dann hab ich Windows wieder zuviel zugedacht... :oops:

marabu 4. Mär 2006 16:29

Re: Existiert Datei?
 
Hi folks,

die function FileExists() ist nicht etwa besonders clever - eher das Gegenteil ist der Fall. Die merkt gar nicht, dass kein UNC-Name sondern ein URL übergeben wird. Wenn der IE den Inhalt der Datei "test.txt" anzeigt, dann deshalb, weil er für bestimmte MIME Typen bereits integrierten Support mitbringt, für andere muss ich eine helper application registrieren.

marabu

Angel4585 4. Mär 2006 16:41

Re: Existiert Datei?
 
mist.. also fileexists funzt definitiv nicht... kann erst später die anderen testen.. der HSV hat in München gewonnen und das kann ich mir in der Sportschau nich entgehen lassen...

SirThornberry 4. Mär 2006 17:00

Re: Existiert Datei?
 
FileExists kann gar nicht funktionieren weil FileExists intern ein FindFirst macht und das arbeitet nunmal nicht auf HTTP-Basis. Wäre ja auch schlimm wenn jeder den inhalt auflisten könnte der auf meinem webspace liegt.

Angel4585 4. Mär 2006 18:56

Re: Existiert Datei?
 
So dieser Code aus dem anderen thread von marabu funktioniert perfekt.
Delphi-Quellcode:
function UrlCheck(sUrl: String; bAllowRedirects: Boolean = false): Integer;
begin
  with TidHTTP.Create(nil) do
  try
    try
      HandleRedirects := bAllowRedirects;
      Head(sUrl);
      Result := Response.ResponseCode;
    finally
      Free;
    end;
  except
      Result := GetLastError;
  end;
end;

begin
  if UrlCheck('http://www.delphipraxis.net', true) = 200
    then ShowMessage('!')
    else ShowMessage('?');
end;
nurnoch eine kleine Frage: Welche Werte kann Request.RespondCode annehmen und wofür stehen die

THX schonmal an alle

SirThornberry 4. Mär 2006 18:59

Re: Existiert Datei?
 
Response-Code kann alle Fehlercodes haben die es eben gibt. 404 wenn die Seite nicht gefunden wird und etliche andere wenn zum Beispiel der Zugriff verweigert wird. Das alles ist für das HTTP-Protokoll definiert. Du müsstest also mal eine Liste der Fehlercodes des HTTP-Protokolls suchen.

Hier mal eine Seite mit einem Link zum Protokoll welches nochmehr fehlercodes enthält: http://www.webmeister.ch/server/error_code.htm

Angel4585 4. Mär 2006 19:11

Re: Existiert Datei?
 
cool danke :thumb:

himitsu 25. Aug 2010 17:17

AW: Existiert Datei?
 
Aufgrund einiger Problemchen hier nocheine Variante:
Delphi-Quellcode:
uses
  IdHeaderList, IdHTTP;

type
  TCheckHeadersAvailable = class
    class procedure Check(Sender: TObject;
      AHeaders: TIdHeaderList; var VContinue: Boolean);
  end;

class procedure TCheckHeadersAvailable.Check(Sender: TObject;
  AHeaders: TIdHeaderList; var VContinue: Boolean);
begin
  VContinue := False;
end;

function UrlCheck(sUrl: String; bAllowRedirects: Boolean = false): Integer;
begin
  with TIdHTTP.Create(nil) do
    try
      HandleRedirects := bAllowRedirects;
      OnHeadersAvailable := TCheckHeadersAvailable.Check;
      try
        Head(sUrl);
        Result := Response.ResponseCode;
      except
        if (Response.ResponseCode >= 400) and (Response.ResponseCode < 600) then
          Result := Response.ResponseCode else Result := 503;
      end;
    finally
      Free;
    end;
end;
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var
  C: Integer;
begin
  C := UrlCheck('http://www.google.de/mdklsandksj.txt', True);
  if C = 200 then ShowMessage('OK')
  else ShowMessage(Format('Fehler %d', [C]));
end;
oder
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
begin
  if UrlCheck('http://www.google.de/mdklsandksj.txt', True) = 200 then
    ShowMessage('OK')
  else
    ShowMessage('Fehler');
end;

Ach ja, GetLastError (siehe Post 13) als Result ist keine gute Idee.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 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