Entwickler-Ecke

Dateizugriff - Datei kann nicht erstellt werden Zugriff verweigert!


spoof - Sa 23.11.13 15:29
Titel: Datei kann nicht erstellt werden Zugriff verweigert!
Hey, hab ein Problem!

Ich versuche mich gerade daran eine Datei aus dem Internet zu laden mit idhttp, was auch funktioniert, allerdings nur wenn ich die Datei unter C speicher.
Wenn ich die Datei jetzt so speichern möchte im Pfad der exe:

Delphi-Quelltext
1:
2:
3:
4:
pfad:=ExpandFileName(ParamStr(0)); //pfad der ausgeführten exe
pfad:=ExtractFileDir(pfad)+'\test.jpg';  //pfad ohne exe + speichername der datei

fn := pfad; //speicherort


Dann bekomm ich diese Fehlermeldung:

"C:\users\pcname\desktop\ordner\test.jpg kann nicht erstellt werden. Zugriff verweigert.
Was mach ich falsch?

Als ich so gespeichert hab hat es funktioniert:


Delphi-Quelltext
1:
fn := 'C:\test.jpg';                    


aber eben nur unter C.

Edit: liegt wohl an meinem pc bei einem freund geht es!


GuaAck - Sa 23.11.13 23:46

Hallo spoof,

a) Gibt es denn das in der Fehlermeldung angegebene Verzeichnis?
Die meisten File-Routinen können zwar eine Datei neu anlegen, aber kein neues Verzeuichnis, dass muss man selbst machen.

b) Könntest Du in das Verzeichnis eine beliebige Datei hinein kopieren?

c) Warum das ExpandFileName? (Schadet wohl auch nicht, aber Paramstr[0] gibt ja Pfad + Name zurück. ExpandFilename wird ja nur gebraucht, wenn nur der relative Pafad (..\xx\yy\) bekannt ist.)

Gruß
GuaAck


jaenicke - So 24.11.13 11:45

Im Pfad der Exe ist ohnehin keine gute Idee, da du dort normalerweise (außer wenn sie wie bei dir auf dem Desktop liegt) keine Schreibrechte hast. Deshalb solltest du es dir gleich angewöhnen im richtigen Ordner zu speichern.
Bei einem solchen Download entweder im Anwendungsdatenverzeichnis oder im temporären Verzeichnis, je nachdem ob du die Datei dauerhaft speichern willst oder nur temporär brauchst.

Mehr zu dem Thema hier:
http://www.delphi-library.de/viewtopic.php?p=548600

Der Quelltext soweit du ihn gepostet hast funktioniert jedenfalls eigentlich. Wie sieht denn der Rest davon aus? Vielleicht erstellst du zweimal einen Zugriff auf die Datei oder so.


spoof - Mo 25.11.13 18:02

Ein kollege hat es bei sich ausprobiert bei ihm geht es.
Ja es gibt den Pfad wo gespeichert werden soll, es muss an irgendwelchen Windows 7 Einstellungen von meinem Pc liegen dass ich keine Scheibrechte hab oder so, es geht nur bei mir nicht.


jaenicke - Mo 25.11.13 23:26

Bleibt nur mit dem Process Monitor von Sysinternals/Microsoft zu schauen was genau bei dem Dateizugriff passiert.

Außerdem kannst du natürlich mal einfach nach den Rechten auf dem Ordner schauen.


Hochhaus - Fr 13.12.13 19:50

user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:
Hey, hab ein Problem!


Hast Du es schon wahlweise mit Administrator-Rechten und einem gewöhnlichen User probiert ?

Hochhaus


drstar - Di 29.04.14 13:09

ich weiß zwar nicht, welche Delphi-Version Du verwendest, aber das "users" macht mich argwöhnisch. Bin mit Delphi 7 bei diesen symb. Links schon auf die Nase gefallen. Probiere mal "C:\Benutzer\pcname\Desktop\Ordner\bild.jpg" anstelle von "users". Würd mich nicht wundern, wenn es daran liegt. An den Admin-Rechten dürfte es nicht scheitern, denn wenn er im Root von C: speichern kann, hat er wohl die nötigen Rechte, um auch auf dem Desktop zu speichern.