Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Explorer stürzt ab (https://www.delphipraxis.net/67731-explorer-stuerzt-ab.html)

Amateurprofi 19. Apr 2006 03:23


Explorer stürzt ab
 
Ich habe ein eigenartiges Problem mit dem Windows-Explorer.
Ich erstelle eine Datei mit FileCreate (bzw. öffne sie mit FileOpen, wenn sie schon existiert), fülle sie mit FileWrite und schließe sie mit FileClose.
Wenn ich dann im Explorer die Datei rechtsklicke (um über Eigenschaften die exakte Größe zu sehen) oder linksklicke, z.b. um sie zu löschen, stürzt der Explorer ab.

Im Programm läuft das so, daß ein Datenpuffer (ca. 16 Mb) gefüllt wird, und dann, wenn seine Kapazität erschöpft ist auf die Platte geschrieben wird. Es ist sichergestellt, daß die Datei unmittelbar vor dem Schreiben geöffnet wird und unmittelbar danach wieder geschlossen wird. Es ist auch sichergestellt, daß während dieser Zeit keine anderen Dateien gelesen oder geschrieben werden oder auch nur geöffnet sind.

Wenn ich das ganze wie unten simuliere, tritt das Problem nicht auf.

Hat jemand eine Idee, was solche Probleme verursachen könnte?

Danke.

Delphi-Quellcode:
PROCEDURE TMain.Test;
const
   buffersize=16800000; // ca. 16 Mb und durch 2..8 teilbar
   maxfilesize=22000000000; // min High(cardinal)*5 wird benötigt
   filename='Test.dat';
type
   TData=Array[0..maxint div 8-1] of int64;
   TPData=^TData;
var
   pdata:TPData;
   fh,buffercount:integer;
   fsize,freesize,freecount:int64;
   dsn:string;
begin
   GetMem(pdata,buffersize);
   // Hier wird pdata mit Daten gefüllt, die Anzahl der zu sichernden
   // Int64 Werte steht dann in buffercount
   // Zur Vereinfachung hier auf 2 Mio gesetzt
   buffercount:=2000000;
   dsn:=ExtractFilePath(paramstr(0))+filename;
   if FileExists(dsn) then begin
      fh:=FileOpen(dsn,fmOpenWrite);
   end else begin
      fh:=FileCreate(dsn);
   end;
   if fh>=0 then begin
      fsize:=FileSeek(fh,Int64(0),2); // Dateizeiger ans Ende
      freesize:=maxfilesize-fsize;
      if freesize>0 then begin
         freecount:=freesize div 8;
         if buffercount>freecount then buffercount:=freecount;
         FileWrite(fh,pdata[0],buffercount*8);
      end;
   end;
   FileClose(fh);
   FreeMem(pdata);
end;

marabu 19. Apr 2006 08:09

Re: Explorer stürzt ab
 
Hallo Klaus,

tritt das Problem auch noch auf, wenn du beim Öffnen der Datei einen passenden Share-Modus angibst?

Grüße vom marabu

Amateurprofi 19. Apr 2006 15:54

Re: Explorer stürzt ab
 
Danke, marabu

ich habs mit
Delphi-Quellcode:
 fh:=FileOpen(dsn,fmOpenWrite or fmShareDenyNone);
versucht, ohne Erfolg - leider

Hawkeye219 19. Apr 2006 18:26

Re: Explorer stürzt ab
 
Hallo Klaus,

möglicherweise "erkennt" eine Explorererweiterung (ShellExtension) ja die Datei an ihrer Namenserweiterung ".dat" und versucht die darin enthaltenen Daten zu interpretieren. Bei Deinem Testprogramm ist die Datei mit 0-Bytes gefüllt, was offenbar keine Probleme verursacht.

Zu Testzwecken würde ich der Datei eine andere Namenserweiterung geben (z.B. ".klaus" :mrgreen:). Vielleicht tritt der Fehler dann nicht mehr auf.

Gruß Hawkeye

Amateurprofi 19. Apr 2006 21:10

Re: Explorer stürzt ab
 
Hallo Hawkeye,
Danke für den Tip. Das scheint es gewesen zu sein.
Als Defaultprogramm glaubt der Explorer (bei mir) den Editor verwenden zu müssen.
Und offensichtlich wird der bereits aufgerufen, wenn er noch gar nicht gefragt ist, und er scheint mit bestimmten Daten Probleme zu haben.


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