per Default ist MileMode nur auf fmOpenReadWrite gesetzt (in der
Unit System)
also werden Dateien damit nicht exlusiv geöffnet.
Zitat von
Infect:
jedoch bin ich davon ausgegangen, dass das bei Windows bei schreibenden Zugriffen automatisch so gesteuert wird.
indows macht nichts automaisch (wär ja auch noch schöner, weil sonst wüßte man ja nicht was windows wann machen würde), das muß man schon selber angeben.
Zitat von
Infect:
Und Append ist für meine Begriffe ja ein schreibender Zugriff.
jupp, isser
Zitat von
Infect:
Diese Annahme wurde für mich dadurch bekräftigt, dass ein schreibendes Öffnen ein und derselben Datei mittels Append eben NICHT durch mehrere Programme gleichzeitig möglich ist, sondern in einer
Exception endet. Auch ohne diese besagte Zeile!!!
mein Tipp, wenn du uns nicht glaubst:
versuch doch einfach mal eine Datei mehrmals zu öffnen.
Zitat von
Infect:
Das einzige, was ich daher von euch wissen wollte, ist, was das vorige setzten des FileMode genau bewirkt.
das wurde doch schon mehrmals gesagt.
Zitat von
Infect:
Für mich ergeben sich zumindest bei mir KEINE sichtbaren Änderungen, wenn ich diese Zeile einfüge!!!
nicht?
Zitat von
Infect:
Also frage ich nochmal: was bewirkt die ZeileFileMode := fmOpenReadWrite or fmShareExclusive;
genau? Was ist anders, wenn ich die Zeile einfach weglasse? Mein Programm verhält sich wie gesagt genauso...
siehe oben (da per Default nicht gesetzt)
aber de Witz Dabei, ich hab es eben selbst mal ausprobiert und war "geschockt"
im Delphi 7 hier wird die Datei bei Schreibzugriff (Rewrite oder Append) immer im exklusiven Modus geöffnet, selbst wenn der nicht angegeben ist.
Und besonsters geschockt war ich, als ich selber angegeben hab, daß mit Sharing-Rechten (nicht Exklusiv) geöffnet werden sollte
Ich würde das jetzt mal ganz einfach als Delphifehler auslegen
und dazu raten dieses lieber nicht auszunutzen/vorauszusetzten (wer weiß ob/wann das mal repariert wird/wurde)
eigentlich müßte das Erste ohne
Exception durchlaufen und das Zweite wie gewollt bei Append(F2); eine
Exception auslösen.
Delphi-Quellcode:
Var F, F2: TextFile;
Begin
// testdatei erstellen
AssignFile(F, 'test.txt');
Rewrite(F);
CloseFile(F);
//FileMode := fmOpenReadWrite or fmShareDenyNone;
// mit sharing-rechten
AssignFile(F, 'test.txt');
Append(F);
AssignFile(F2, 'test.txt');
Append(F2);
CloseFile(F2);
CloseFile(F);
FileMode := fmOpenReadWrite or fmShareExclusive;
// exklusiv
AssignFile(F, 'test.txt');
Append(F);
AssignFile(F2, 'test.txt');
Append(F2);
CloseFile(F2);
CloseFile(F);
End;