AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi dateizugriff verweigert bei beliebigen Ordner-Zugriff
Thema durchsuchen
Ansicht
Themen-Optionen

dateizugriff verweigert bei beliebigen Ordner-Zugriff

Ein Thema von Flummi · begonnen am 14. Sep 2007 · letzter Beitrag vom 17. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Flummi

Registriert seit: 14. Sep 2007
8 Beiträge
 
Delphi 7 Professional
 
#1

dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 14. Sep 2007, 10:54
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:
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 <> 'Unbekanntthen
          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 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.
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.

Vielen Dank schonmal für Eure Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von f.siebler
f.siebler

Registriert seit: 15. Jan 2007
Ort: Hamburg
170 Beiträge
 
Delphi 2006 Professional
 
#2

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 14. Sep 2007, 11:22
Moin,
kannst du normal mit dem Explorer auf den Ordner zugreifen?
Viele Grüße aus Hamburg
Fabian
sql-praxis.net: sql von der Theorie in die Praxis...
  Mit Zitat antworten Zitat
Flummi

Registriert seit: 14. Sep 2007
8 Beiträge
 
Delphi 7 Professional
 
#3

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 14. Sep 2007, 11:33
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

PfadName:=INIPfadname+'TEST\'; Der INI-Eintrag für "INIPfadname" lautet z.B. "C:\"

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...
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 14. Sep 2007, 15:16
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
Michael Kübler
  Mit Zitat antworten Zitat
Flummi

Registriert seit: 14. Sep 2007
8 Beiträge
 
Delphi 7 Professional
 
#5

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 17. Sep 2007, 08:46
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:
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));
...
...
...
...
Der INIPfadname und der Pfadname werden richtig ausgegeben. In meinen Test habe ich die Werte:

INIPfadname = D:\Test\
Pfadname = D:\Test\Dateien\

...erhalten. Die Backslashes werden also auch richtig gesetzt.
Die dritte Message macht mich allerdings stutzig :

"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...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 17. Sep 2007, 09:12
Es wird nicht überprüft, ob es sich um ein Verzeichnis handelt. Das Kopieren geht nur, wenn (SearchRec.Attr and faDirectory) = 0.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Flummi

Registriert seit: 14. Sep 2007
8 Beiträge
 
Delphi 7 Professional
 
#7

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 17. Sep 2007, 09:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#8

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 17. Sep 2007, 09:44
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Flummi

Registriert seit: 14. Sep 2007
8 Beiträge
 
Delphi 7 Professional
 
#9

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 17. Sep 2007, 10:08
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));
...
...
...
...
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#10

Re: dateizugriff verweigert bei beliebigen Ordner-Zugriff

  Alt 17. Sep 2007, 10:19
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz