Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Speicherung- da original Datei schreibschutz hat (https://www.delphipraxis.net/94056-problem-mit-speicherung-da-original-datei-schreibschutz-hat.html)

Black07 15. Jun 2007 11:05


Problem mit Speicherung- da original Datei schreibschutz hat
 
Hi

ich habe ein Problem eine schreibgeschützte Datei zu überschreiben.

Wenn ich den Codeablauf in Delphi mit Haltepunkten teste funktioniert es nur wenn ich
das Programm dann "loslasse" bekomme ich eine Fehler-Meldung, das die Datei nicht gespeichert werden kann.

Was auch klar wird, da der Schreibschutz noch immer gesetzt ist,
es scheint mir als ob WinXP die Anweisungen nicht so schnell durchführen kannn,
wie das Delphiprogramm die Anweisungen gibt.


Delphi-Quellcode:
 
if form6.neuesverzeichnisselect6=false then   //neues Verzeichnis eigeben?-Nein
  begin
    if FileExists(squestverzeichnis4+'\'+squestdateiname4) then  //überprüfen ob im alten Verzeichnis die Datei existiert
      begin
      fileex:=true;
        if (FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) and faReadOnly) >= 0  then
          begin
             FileSetAttr(squestverzeichnis4+'\'+squestdateiname4, FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) xor faReadOnly);
          end;
           deletefile(squestverzeichnis4+'\'+squestdateiname4);
      end;
  memouebergabeneu.Lines.SaveToFile(squestverzeichnis4+'\'+squestdateiname4);
end;
Lösung ?

DeddyH 15. Jun 2007 11:22

Re: Problem mit Speicherung- da original Datei schreibschutz
 
Hallo, 2 Dinge fallen mir auf:
Zitat:

Zitat von Black07
Delphi-Quellcode:
if (FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) and faReadOnly) >= 0

Das ergibt IMHO wahr, denn da kann nur 0 (ergibt wahr) oder faReadOnly (ergibt auch wahr) bei herauskommen. :mrgreen:
Zitat:

Zitat von Black07
Delphi-Quellcode:
FileSetAttr(squestverzeichnis4+'\'+squestdateiname4, FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) xor faReadOnly);

Damit schaltest Du als Folgefehler das Attribut auf jeden Fall um. Was spricht dagegen, das so zu machen?
Delphi-Quellcode:
FileSetAttr(squestverzeichnis4+'\'+squestdateiname4,FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) and not faReadOnly);

Bernhard Geyer 15. Jun 2007 11:25

Re: Problem mit Speicherung- da original Datei schreibschutz
 
Weiter Möglichkeit: Virenscanner! Oh da wurde etwas geändert - Dann Check ich mal die ganze Datei asynchron.

Black07 15. Jun 2007 11:32

Re: Problem mit Speicherung- da original Datei schreibschutz
 
Zitat:

Zitat von DeddyH
Hallo, 2 Dinge fallen mir auf:
Zitat:

Zitat von Black07
Delphi-Quellcode:
if (FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) and faReadOnly) >= 0

Das ergibt IMHO wahr, denn da kann nur 0 (ergibt wahr) oder faReadOnly (ergibt auch wahr) bei herauskommen. :mrgreen:
Zitat:

Zitat von Black07
Delphi-Quellcode:
FileSetAttr(squestverzeichnis4+'\'+squestdateiname4, FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) xor faReadOnly);

Damit schaltest Du als Folgefehler das Attribut auf jeden Fall um. Was spricht dagegen, das so zu machen?
Delphi-Quellcode:
FileSetAttr(squestverzeichnis4+'\'+squestdateiname4,FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) and not faReadOnly);

Zitat:

Delphi-Quellcode:
if (FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) and faReadOnly) > 0

geändert!!

wohl blind gewesen in den anderen Abfragen hab ich auch immer nur > stehen.


Delphi-Quellcode:
FileSetAttr(squestverzeichnis4+'\'+squestdateiname4,FileGetAttr(squestverzeichnis4+'\'+squestdateiname4) and not faReadOnly);
das heißt doch das überprüft wird ob Schreibschutz auf der Datei im Ordner gesetzt ist und wenn ja dann
schreibschutz aufheben - korrekt?

DeddyH 15. Jun 2007 11:57

Re: Problem mit Speicherung- da original Datei schreibschutz
 
Nicht ganz korrekt. Das heißt, das Schreibschutzattribut auf jeden Fall entfernen (wenn es vorher nicht gesetzt war, passiert auch nichts).


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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