Einzelnen Beitrag anzeigen

Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#4

Re: Schreib-/Leserechte auf CSIDL_COMMON_APPDATA

  Alt 8. Dez 2007, 18:28
Obwohl Du später nur "read" verwendest, wird die Datei trotzdem immer zum Lesen und Schreiben geöffnet!

Setze mal vor dem Öffnen den Filemode auf fmOpenRead:
Delphi-Quellcode:
if FileExists(Source) then
  try
    FileMode := fmOpenRead; // aus SysUtils
    assignFile(f, Source);
    reset(f);
    read(f, a); // Nur lesen!
  finally
    closeFile(f);
  end;
Der Standard-Wert für FileMode ist nämlich fmOpenReadWrite (=2)

Aber Achtung:
Wenn Du FileMode änderst, verwenden alle nachfolgenden Reset()-Aufrufe den neuen Filemode. Außerdem ist FileMode nicht Thread-sicher.

Du kannst diese Probleme umgehen, wenn Du statt der "veralteten" Aufrufe AssignFile(), Reset(), Read() das Streaming-System von Delphi verwendest:
Delphi-Quellcode:
if FileExists(VerFile) then
begin
  FS := TFileStream.Create(VerFile, fmOpenRead);
  try
    FS.ReadBuffer(aVersion, SizeOf(aVersion));
    // mach was mit dem gelesenen Datensatz
  finally
    FS.Free;
  end;
end
else
  ...
HTH
KalwaDOS
Achim
  Mit Zitat antworten Zitat