![]() |
dateizugriff verweigert bei beliebigen Ordner-Zugriff
Hallo,
ich habe ein großes Problem mit einem Delphi-Programm, dass urplötzlich den Zugriff auf einen Ordner verweigert (Dateizugriff verweigert). Das Programm läuft unter NT und Win XP. Zum Programm selbst...: Ein Ausschnitt der "fehlerhaften(?)" Codes bzw. der Prozedur:
Delphi-Quellcode:
Ich bin mir nicht wirklich sicher, ob das Problem wirklich im Quellcode (bzw. in dieser Prozedur)liegt. Der Pfadname wird per INI-Datei eingelesen. Egal welchen Pfad ich auch nehme, auch ein frisch angelgter Ordner und ein lokaler Zugriff bringt den Fehlercode 5. Kommentiere ich diese Prozedur vom Programmablauf aus, dann gehts...! Auch der DB-Aufruf innerhalb der Prozedur hat KEINEN Einfluss. Kommentiere ich diesen aus, erhalte ich trotzdem den Fehler.
procedure TfrmMain.DateiSenden;
const return = chr(13); var Daten : Empfaenger; SearchRec : TSearchRec; dateiname : string; text : string[18]; ASatz : string; FromF, ToF : file; bfile : textfile; NumRead, NumWritten : Integer; Buf: array[1..1] of Char; begin // Dateien suchen if FindFirst(PfadName+'*.*',faAnyFile,SearchRec)=0 then begin repeat dateiname:=SearchRec.Name; // Daten aus der DatenBank holen Daten:=DepotSuchen(copy(dateiname,4,3)); if daten.Name <> 'Unbekannt' then begin AssignFile(bfile,PfadName+dateiname); reset(bfile); readln(bfile,ASatz); CloseFile(bfile); bordero:=copy(ASatz,5,18); AssignFile(FromF, PfadName+dateiname); Reset(FromF, 1); AssignFile(ToF, PfadName+'temp.dat'); Rewrite(ToF, 1); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); if ord(Buf[1])=10 then begin Buf[1]:=chr(13); BlockWrite(ToF,Buf[1],NumRead,NumWritten); Buf[1]:=chr(10); BlockWrite(ToF,Buf[1],NumRead,NumWritten); end else BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0); CloseFile(FromF); CloseFile(ToF); DeleteFile(PfadName+dateiname); RenameFile(PfadName+'temp.dat',PfadName+dateiname); // Datei versenden with IdMsgSend do begin IdMsgSend.MessageParts.Clear; TIdAttachment.Create(IdMsgSend.MessageParts,PfadName+dateiname); From.Text:=Absender; Recipients.EMailAddresses:=daten.EMail; Subject:='test'; SMTP.Connect; try SMTP.Send(IdMsgSend); finally SMTP.Disconnect; end; end; DeleteFile(PfadName+dateiname); end; until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; end; Ich selbst bin kein großer Delphi-Programmierer, verstehe aber die Logik und den Quelltext sehr gut. Entsprechend ist der Code im Original nicht von mir selbt geschrieben. :zwinker: Vielen Dank schonmal für Eure Hilfe! |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Moin,
kannst du normal mit dem Explorer auf den Ordner zugreifen? |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Hallo,
ja, der Zugriff über den Explorer ist völlig uneingeschränkt. Das Programm wird unter dem gleichen User ausgeführt wie der Eigentümer/Besitzer des Ordners (Admin). Auch Änderungen der Ordner-Attribute bringen keine Verbesserung (Stichwort: Schreibschutz) Das Programm selbst stürzt bei der Fehlermeldung nicht ab. Vielleicht muss ich dazu noch etwas sagen: Der Dateipfad, der dem Programm via INI-File zugewiesen wird, wird für diese Prozedur erweitert: Hier einmal ein Beispiel mit dem Unterordner TEST
Delphi-Quellcode:
Der INI-Eintrag für "INIPfadname" lautet z.B. "C:\"
PfadName:=INIPfadname+'TEST\';
Auf den INIPfadnamen kann beliebig zugegfriffen werden, auch wenn dieser Pfad noch Unterordner enthält. Sobald aber die o.g. Prozedur den Unterordner (Hier "Test\") aufruft, kommt der Fehler "Dateizugriff verweigert". Völlig egal, ob gerade angelegt, mit Dateien gefüllt oder leer... |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Hallo!!
Laß Dir mal an der Stelle des Fehlers den KOMPLETTEN Dateinamen z.B. mittels Showmessage anzeigen. Evtl. fehlt ja eine Endung und das Programm denkt es handelt sich "nur" um eine Pfadangabe... SCRaT |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Hallo,
danke für den Tipp, eventuell bin ich einen kleinen Schritt weiter. Ich habe den Anfang der Prozedur wie folgt verändert:
Delphi-Quellcode:
Der INIPfadname und der Pfadname werden richtig ausgegeben. In meinen Test habe ich die Werte:
procedure TfrmMain.DateiSenden;
const return = chr(13); var Daten : Empfaenger; SearchRec : TSearchRec; dateiname : string; text : string[18]; ASatz : string; FromF, ToF : file; bfile : textfile; NumRead, NumWritten : Integer; Buf: array[1..1] of Char; begin ShowMessage(INIPfadname); ShowMessage(PfadName); // Dateien suchen if FindFirst(PfadName+'*.*',faAnyFile,SearchRec)=0 then begin repeat dateiname:=SearchRec.Name; ShowMessage(PfadName+dateiname); // Daten aus der DatenBank holen Daten:=DepotSuchen(copy(dateiname,4,3)); ... ... ... ... INIPfadname = D:\Test\ Pfadname = D:\Test\Dateien\ ...erhalten. Die Backslashes werden also auch richtig gesetzt. Die dritte Message macht mich allerdings stutzig :gruebel: : "D:\Test\Dateien\." Die Dateinamen bestehen hauptsächlich aus Zahlen, es wird mir aber ein "." (Punkt) zurückgegeben. Das Programm hat jedoch Admin-Rechte bzw. wir unter dem Admin-Account ausgeführt. Hat jemand eine Idee? Vielen Dank schonmal... |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Es wird nicht überprüft, ob es sich um ein Verzeichnis handelt. Das Kopieren geht nur, wenn (SearchRec.Attr and faDirectory) = 0.
|
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Danke für den Tipp, habe das ganze als IF-Klausel mit eingebaut, das Ergebnis ist jedoch das Gleiche. Die Pfadnamen werden richtig ausgegeben, es kommt dann aber nur ein "." zurück. (Das Verzeichnis ist aber definitv gefüllt!!!)
Die Dateien selbst haben auch keinen Schreibschutz. |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Das scheint aber nicht funktioniert zu haben. Nach meiner Erfahrung sind die ersten beiden Einträge, die gefunden werden, immer "." für das aktuelle und ".." für das übergeordnete Verzeichnis. Du musst das abfangen, das ist ein altes Ärgernis.
|
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
:?: So... :?:
Delphi-Quellcode:
procedure TfrmMain.DateiSenden;
const return = chr(13); var Daten : Empfaenger; SearchRec : TSearchRec; dateiname : string; text : string[18]; ASatz : string; FromF, ToF : file; bfile : textfile; NumRead, NumWritten : Integer; Buf: array[1..1] of Char; begin ShowMessage(INIPfadname); ShowMessage(PfadName); // Dateien suchen if FindFirst(PfadName+'*.*',faAnyFile,SearchRec)=0 then If (SearchRec.Attr And faDirectory = 0) then begin repeat dateiname:=SearchRec.Name; ShowMessage(PfadName+dateiname); // Daten aus der DatenBank holen Daten:=DepotSuchen(copy(dateiname,4,3)); ... ... ... ... |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Haben Deine Dateien vielleicht eine einheitliche Extension (z.B. .txt) oder einen anderen einheitlichen Bezeichner? Dann kannst Du im Findfirst und Findnext als Filter *.txt o.ä. einsetzen
Grüße, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 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