![]() |
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 |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Hallo,
nein, leider ist die Datei-Extension uneinheitlich. Die Dateien kommen von einem anderen System, die Endungen sind nummerisch z.B. .034 oder .152 Eine Datei könnte z.B. den Namen 053045.123 tragen. @ DeddyH Das Programm selbst scheint nun ohne Fehler durchzulaufen, die Dateien jedoch werden nicht aus dem Verzeichnis abgearbeitet... Hab ich noch irgendwo einen Fehler? vielen Dank schon mal für den guten Tipp mit den "." und ".." :thumb: |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Hallo,
Du musst die Prüfung innerhalb der Schleife für jeden gefundenen Eintrag vornehmen.
Delphi-Quellcode:
repeat
If (SearchRec.Attr And faDirectory = 0) then begin //Verarbeitung nur für Dateien end; until FindNext(SearchRec) <> 0; FindClose(SearchRec); |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Delphi-Quellcode:
Es scheint zu laufen. Ich warte noch ein wenig die ersten Ergebnisse ab, die kann ich erst immer ein wenig später prüfen, aber der Fehler ist weg, die Dateien werden abgearbeitet und zum Schluss gelöscht.
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)); If (SearchRec.Attr And faDirectory = 0) then ... ... DATEI-VERARBEITUNG..... ... ... Ich melde mich noch mal... Bis jetzt sieht es supi aus! :bounce1: |
Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff
Hallo noch mal,
Test war erfolgreich, das Programm läuft wieder. Vielen Dank an alle, die mir hier weiter geholfen haben. :-D Was ich jedoch weiterhin nicht verstehe ist, dass das Programm bis vor Kurzem noch ohne Probleme funktioniert hat - ohne die Prüfung:
Delphi-Quellcode:
Dann, wirklich von einem Tag zum anderen, kam diese Fehlermeldung "Dateizugriff verweigert" und nichts ging mehr. :gruebel:
If (SearchRec.Attr And faDirectory = 0) then
Naja, eventuell finde ich ja noch einen Hinweis darauf. Noch mal vielen Dank für die Hilfe! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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