Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WinInet erkennt keine .htaccess (https://www.delphipraxis.net/117858-wininet-erkennt-keine-htaccess.html)

hsbc 26. Jul 2008 16:48


WinInet erkennt keine .htaccess
 
Hallo allerseits,

FtpFindFirstFile erkennt keine Dateinamen, welche mit einem Punkt beginnen (.htaccess, etc.)

Hat jemand eine Idee, wie ich trotzdem diese Dateien mit WinInet einlesen bzw. löschen kann?

mfg
Herbert

Bernhard Geyer 26. Jul 2008 16:54

Re: WinInet erkennt keine .htaccess
 
Sieht du denn die Datei mit andern Ftp-Clients?
Da der Windows-API generell Dateien die nur aus Extension bestehen suspekt sind würde ich mal Kompos verwenden die nicht auf die WinAPI aufsetzen.

hsbc 26. Jul 2008 17:07

Re: WinInet erkennt keine .htaccess
 
Hallo Bernhard,

das war aber schnell.

Ich schreibe hier ein FTP-Programm mit WinINet. Habe bereits ein funktionierendes FTP-Programm mit den Indys geschrieben. Wollte nur mal zum Vergleich und zum Lernen das ganze mal mit WinInet versuchen. Funktioniert auch soweit alles, bis eben auf diese Kleinigkeiten.

Mit dem Indy-Programm sehe ich die .htaccess und kann sie auch ändern bzw. löschen.

Trotzdem wäre es für mich interessant, das ganze auch mit WinINet hinzubekommen.

mfg
Herbert

toms 26. Jul 2008 17:20

Re: WinInet erkennt keine .htaccess
 
Hallo, der FTP-Client von shima basiert auf den Funktionen von WinInet. .htaccess etc. Dateien werden angezeigt.
Kannst ja mal einen Blick in die Sourcen werfen.

Christian Seehase 26. Jul 2008 19:16

Re: WinInet erkennt keine .htaccess
 
Moin Bernhard,

Zitat:

Zitat von Bernhard Geyer
Da der Windows-API generell Dateien die nur aus Extension bestehen suspekt sind würde ich mal Kompos verwenden die nicht auf die WinAPI aufsetzen.

wie kommst Du denn da drauf?
Man kann solche Dateien nur nicht im Explorer anlegen, was ich mal als Bug ansehen würde, denn grundsätzlich lässt das Dateisystem Datei-/Ordnernamen die mit einem Punkt beginnen zu.

hsbc 27. Jul 2008 07:13

Re: WinInet erkennt keine .htaccess
 
Hallo Toms,

ich habe den FTP-Client von Shima jetzt probiert, auch hier werden keine Dateien, die mit einem Punkt beginnen, angezeigt.

Hat noch jemand eine Idee, wie ich hier zu einer Lösung komme?

mfg
Herbert

toms 27. Jul 2008 07:17

Re: WinInet erkennt keine .htaccess
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich hab's mit meinem ftp getestet. Wir alles perfekt angezeigt.
Wird also nicht direkt an WinInet liegen.

Bernhard Geyer 27. Jul 2008 07:21

Re: WinInet erkennt keine .htaccess
 
Zitat:

Zitat von Christian Seehase
wie kommst Du denn da drauf?
Man kann solche Dateien nur nicht im Explorer anlegen, was ich mal als Bug ansehen würde, ...

Dann hat dein Windows Explorer wohl einen Bug den meiner (XP und AFAIK auch Arbeits-Vista-PC kann keine Dateinamen vergeben die mit einem Punkt beginnen und nur eine Extension haben.
Zitat:

Zitat von Christian Seehase
denn grundsätzlich lässt das Dateisystem Datei-/Ordnernamen die mit einem Punkt beginnen zu.

Dem wiederspreche ich nicht, da ja sonst CVS/SVN auf Windows so ihre Probleme hätten.

Gibts bei FtpFindFirstFile evtl. nocht Einstellungen um auch Systemdateien, versteckte Dateien etc. anzuzeigen? Evtl. wird ja hier was ausgeblendet?

hsbc 27. Jul 2008 07:38

Re: WinInet erkennt keine .htaccess
 
Ist interessant.

Woran könnte es sonst liegen?

In FtpFindFirstFile sind mir keine weiteren Einstellungen bekannt. Hier ist beschrieben, wenn man als Parameter NIL übergibt, werden alle Dateien angezeigt.

Gibt es vl. verschiedene .dll's (TWin32FindData), welche ja angeblich beim Internet Explorer dabei sind?

mfg
Herbert

Bernhard Geyer 27. Jul 2008 07:50

Re: WinInet erkennt keine .htaccess
 
Zeig doch mal ein bischen Code was du bisher machst.

hsbc 27. Jul 2008 08:08

Re: WinInet erkennt keine .htaccess
 
Hier ein kleiner Ausschnitt des relevanten Codes:

Delphi-Quellcode:
procedure Tfmain.LoescheVerz(Path: String);
var
  hSearch : HINTERNET;
  findData: TWin32FindData;
  fn: string;
begin
  hSearch := FtpFindFirstFile(hConnect, PChar(Path), findData, 0, 0);
  repeat
    fn := findData.cFileName;

// Wenn es sich um einen Dateinamen, welcher mit einem Punkt beginnt, handelt
// ist fn leer.

    if findData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
    begin
Wie gesagt, es werden sämtliche Verzeichnisse und Dateien ordnungsgemäß in fn eingelesen, außer es handelt sich um einen Dateinamen, welcher mit einem Punkt beginnt. In diesem Falle ist der String fn leer.

mfg
Herbert

hsbc 28. Jul 2008 08:08

Re: WinInet erkennt keine .htaccess
 
So wie es aussieht, dürfte es hier wirklich keine Lösung geben.

Schade - somit kann ich WinInet wohl für mein Vorhaben nicht verwenden, was ich zwar fast nicht glauben kann, da
die DLL von Microsoft kommt (oder funktioniert es vl. gerade deswegen nicht).

Wie könnte ich sonst noch (ohne Indy) alle Server-Dateien einlesen ???

Hat denn wirklich niemand eine Idee, wie es vl. doch mit WinInet funktionieren könnte?

Hier nochmals meine Ergebnisse:

Gegeben ist: Im Server-Verzeichnis steht (nur mehr) eine einzige Datei mit dem Namen .htaccess

Sobald ich folgende Zeile aufrufe:

Delphi-Quellcode:
  hSearch := FtpFindFirstFile(hConnect, PChar(Path), findData, 0, 0);
enthält der Wert von hSearch den Wert NIL und GetLastError hat den Wert 18

Es wird also überhaupt nicht erkannt, dass hier noch eine Datei im Verzeichnis liegt.

Vielleicht hat doch noch jemand eine Idee.

mfg
Herbert

toms 28. Jul 2008 08:13

Re: WinInet erkennt keine .htaccess
 
Hallo, vielleicht liefert MSDN-Library durchsuchenInternetGetLastResponseInfo mehr Informationen zum Fehler.

Zitat:

If GetLastError returns ERROR_INTERNET_EXTENDED_ERROR, as in the case where the function finds no matching files, call the InternetGetLastResponseInfo function to retrieve the extended error text, as documented in Handling Errors.

mkinzler 28. Jul 2008 08:14

Re: WinInet erkennt keine .htaccess
 
Synapse, ICS, ...

marabu 28. Jul 2008 09:02

Re: WinInet erkennt keine .htaccess
 
Hallo Herbert,

beim Forschen in meinem Archiv bin ich auf Code gestoßen, den ich für deinen Thread von neulich angefertigt hatte.

Delphi-Quellcode:
uses
  WinInet;

function FtpGetFiles(hInet: HInternet; user, password, server, localDir, remoteDir: String): Boolean;
var
  fd: TWin32FindData;
  hSession, hSearch: HINTERNET;
begin
  Result := False;
  hSession := InternetConnect(hInet,
    PChar(server), 21, PChar(user), PChar(password),
    INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0
  );
  if Assigned(hSession) then
  begin
    if not FtpSetCurrentDirectory(hSession, PChar(remoteDir)) then
      Exit;
    localDir := IncludeTrailingPathDelimiter(localDir);
    if not DirectoryExists(localDir) then
      MkDir(localDir);

    ChDir(localDir);

    hSearch := FtpFindFirstFile(hSession, nil, fd, 0, 0);
    if Assigned(hSearch) then
    begin
      Result := True;
      repeat
        if (fd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
          Result := FtpGetFile(hSession,
                      fd.cFileName, PChar(localDir + fd.cFileName),
                      False, 64, FTP_TRANSFER_TYPE_UNKNOWN, 0
                    ) else
        if Pos(fd.cFileName, '..') = 0 then
          Result := FtpGetFiles(hInet,
                      user, password, server, localDir + fd.cFileName,
                      remoteDir + fd.cFileName
                    );
      until not (Result and InternetFindNextFile(hSearch, @fd));
      InternetCloseHandle(hSearch);
    end;
    InternetCloseHandle(hSession);
  end;
end;

procedure Test;
var
  hInet: HINTERNET;
begin
  hInet := InternetOpen('Test', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  if Assigned(hInet) then
  try
    FTPGetFiles(hInet, 'herbert', 'toppsigrid', 'localhost', 'c:\temp\hsbc\', '/hsbc/');
  finally
    InternetCloseHandle(hInet);
  end;
end;
Damit finde ich auch .htaccess - du bestimmt auch. Stelle mal ein minimales Demo-Projekt bereit, dann lässt sich dein Problem bestimmt eingrenzen.

Freundliche Grüße

hsbc 28. Jul 2008 11:38

Re: WinInet erkennt keine .htaccess
 
Hallo marabu,

vielen Dank vorerst mal für dein Demo-Programm. Du wirst es nicht glauben, auch hier funktioniert alles einwandfrei, nur Dateien, welche mit einem Punkt beginnen, werden ebenfalls nicht erkannt bzw. heruntergeladen.

Ich habe mir zum Vergleich meine funktionierende Indy-Application angesehen. Bei Indy muss ich folgendes eingeben:

Delphi-Quellcode:
IdFTP.List(sl, '-a', true);
wenn ich das '-a' durch '*.*' ersetze, werden ebenfalls keine .-Dateien mehr gefunden.

Nachdem deine Demo bei dir ja zum Erfolg führt, bin ich mir langsam aber sicher nicht mehr ganz im Klaren, ob hier bei mir nicht andere Faktoren mit im Spiel sind, nur halt welche.

Ich kann gerne ein Mini-Demo meinerseits bereitstellen, aber nachdem dein Demo bei mir ebenfalls keine .-Dateien findet, muss es wohl wo anders liegen.

mfg
Herbert

hsbc 28. Jul 2008 11:51

Re: WinInet erkennt keine .htaccess
 
So, jetzt bin ich nochmal da.

Habe einfach mal probiert und den Parameter -a auch bei FtpFindFirstFile eingebegen:


Delphi-Quellcode:
    hSearch := FtpFindFirstFile(hSession, PChar('-a'), fd, 0, 0);
und siehe da, jetzt werden auch Punkt-Dateien angezeigt.

Wie kann das sein, nirgend wo dokumentiert. Was hat dieses '-a' eigentlich auf sich?

mfg
Herbert

mkinzler 28. Jul 2008 11:58

Re: WinInet erkennt keine .htaccess
 
Weist die CLI an auch versteckte Dateien anzuzeigen


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