![]() |
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; |
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 |
Re: Explorer stürzt ab
Danke, marabu
ich habs mit
Delphi-Quellcode:
versucht, ohne Erfolg - leider
fh:=FileOpen(dsn,fmOpenWrite or fmShareDenyNone);
|
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 |
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 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz