Autor Beitrag
Gerhard_S
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: So 23.09.12 21:35 
Hallo,
wenn ich den Befehl SysUtils.Forcedirectories('abc/def/ghj') anwende, dann sind alle neu erzeugten Verzeichnisse schreibgeschützt - und meine Delphi-Anwendung verweigert den Zugriff, mit Ansage.
Wie hebe ich den Schreibschutz auf?


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 23.09.2012 um 22:09
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mo 24.09.12 01:39 
Hallo,
ich kann den Fehler einkreisen.
1. nach SysUtils.Forcedirectories('G:\abc\def\ghj') ist es problemlos möglich, per Code eine Datei in das Verzeichnis G:\abc\def\ghj zu schreiben (lokale Operation).
2. Es geht aber um einen Dateitransfer via Indys TIdFTP. Der Get-Befehl von TidFTP verweigert mir den Download in das o.g. Verzeichnis mit der Delphi-Fehlermeldung "Datei 'G:\abc\def\ghj' kann nicht erstellt werden. Zugriff verweigert", wenn ich als remote Source /meins/*.* angebe. Bei /meins/meintest.txt geht es aber.
3. Hier mein Code:
ausblenden Delphi-Quelltext
1:
2:
if System.SysUtils.ForceDirectories(LocDir+tempstr) then     
IdFTP1.Get(SL[i]+'/*.*', LocDir+tempstr, True, True);

wobei SL[i] ein Verzeichnis auf dem Webserver ist.
Was nun?
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mo 24.09.12 10:42 
Ursache:
Du kannst per FTP nur einzelne Dateien transferieren, ein "*" gibt es nicht.
Abhilfe: vorher in dieses Verzeichnis wechseln, dateien ermitteln und dann für jede einzelne ein Get ausführen.
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mo 24.09.12 20:00 
Leider geht's auch so nicht.
Ich mache jetzt Folgendes:
- zunächst stelle ich eine lokale Verzeichniskopie her (mit ForceDirectories)
- dann wechsle ich in das entfernte Quellverzeichnis
und dann kommt das, worauf es ankommt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
if IdFTP1.DirectoryListing[j].ItemType = ditFile then
try
IdFTP1.Get(IdFTP1.DirectoryListing[j].FileName, LocDir+tempstr+'\'+IdFTP1.DirectoryListing[j].FileName, True, True);
except
on E:Exception do MessageDlg(E.Message, mtError, [mbOk], 0);
end;
end;

Als Fehlermeldung kommt "No such file". Auf meiner Festplatte landet eine leere Datei. Das verstehe ich nicht. Der erste Parameter von Get ist auf dem Webserver vorhanden, der zweite Parameter soll ja erst erzeugt werden. ForceDirectories erzeugt auf meiner lokalen Festplatte den Verzeichnispfad zur Datei; nach Get ist eine leere Datei mit dem gewünschten Dateinamen vorhanden.
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mo 24.09.12 20:32 
Kann es sein daß es das hier ist?

> IdFTP1.Get(IdFTP1.DirectoryListing[j].FileName, LocDir+tempstr+'\'+IdFTP1.DirectoryListing[j].FileName, True, True);

Weiter oben verwendest Du ja auch '/' für die Server-Seite.
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mo 24.09.12 21:56 
user profile iconmandras hat folgendes geschrieben Zum zitierten Posting springen:
Kann es sein daß es das hier ist?

> IdFTP1.Get(IdFTP1.DirectoryListing[j].FileName, LocDir+tempstr+'\'+IdFTP1.DirectoryListing[j].FileName, True, True);

Weiter oben verwendest Du ja auch '/' für die Server-Seite.

Nach Test: Nein, denn der zweite Parameter hält sich an die lokalen NTFS-Regeln (\ statt /).
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Di 25.09.12 00:09 
Entschuldigung, im Eifer des Gefechts habe ich nicht gesehen daß Parameter 2 der Funktion das Ziel angiebt. Insofern ist "\" ja korrekt. Könntest Du evtl. den vollen Code posten dann könnte ich wiederum das mal auf meinen FTP-Server loslassen.
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: So 30.09.12 01:13 
Thema hat sich erledigt. Schuld war ein fehlender List-Befehl, so dass die alte Auflistung mit dem neuen Inhalt kollidierte.