Entwickler-Ecke

Dateizugriff - TFileStream verhält sich seltsam


dreamtheater - Di 02.09.03 15:13
Titel: TFileStream verhält sich seltsam
Ich benutze einen TFileStream und lese daraus bzw schreibe darin sequentiell Daten nur innerhalb kurzer try .. finally Blöcke.
Hin und wieder passiert es, wenn beim Starten des Prog (aus der Entwicklungsumgebung, anders hab ichs noch nicht probiert) Daten aus dem File gelesen werden, das Prog sehr lange zum Starten braucht. Wenn es dann startet, stellt sich heraus, daß keine Daten gelesen werden konnten (es handelt sich um Farbdaten bzw. die vordefinierten Farben aus einem Color-Dialog). Wenn ich dann ins File schaue sind zwar Daten da, aber an diese angehängt stehen zwei Pfade (die zum Delphi Verzeichnis zeigen), die ich aber garnicht in das file geschrieben habe!
Zusätzlich scheint die Festplatte ständig zu arbeiten, das System wird etwas langsam. Das gibt sich, wenn ich das File lösche.
Hat jemand eine Ahnung, was da sein könnte?


BungeeBug - Di 02.09.03 15:24

Hi,

könntest du evl. den entspechenden Code posten?
Stell doch erst mal sicher das das wirklich an dem Stream liegt und nicht an nem amoklaufenden Vierenscanner ...


dreamtheater - Di 02.09.03 16:21


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure IniSchreiben;
var
   Strom: TFileStream;
   i: Integer;
   sString:string;

 procedure StringSchreiben(str: String);
 var
   iLen: LongInt;
 begin
   iLen:= Length(str);
   Strom.Write(iLen, SizeOf(LongInt));
   Strom.Write(str[1], iLen);
 end;

begin
 try
   Strom:= TFileStream.Create(ChangeFileExt( Application.ExeName, '.cfg'), fmCreate)
   Strom.Write(Farbevon, SizeOf(TFarben));
   for i:= 0 to 15 do
   begin
     sString:=Form1.ColorDialog1.CustomColors.Values['Color'+Chr(Ord('A')+i)];
     StringSchreiben(sString);
   end;
 finally
   Strom.Free;
 end;
end;

Der code sah so aus - mittlerweile habe ich allerdings den Strom außerhalb des try..finally kreiert, was mir sinnvoller erschien... vielleicht ist es damit ja behoben, was ich nicht sagen kann, weils, wie gesagt, nur gelegntlich auftritt. Habe übrigens kein Virenprogramm, aber seit ich SP4 unter Win2k installert habe stürzt auch SCSIPORT.SYS gelegentlich beim booten mit bluescreen ab.

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt


dreamtheater - Do 04.09.03 20:14

Das Problem besteht trotz geänderten Codes immer noch, es scheint besonders beim ersten Compile nach dem Starten von D7 aufzutreten (regelmäßigkeit konnte ich aber noch keine entdecken). Außerdem habe ich mich offenbar geirrt: es sind keineswegs die gewünschten Daten da, sondern nur Unfug.
Hier der Inhalt des korrupten cfg files
Zitat:

-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J+
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$Y-
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"C:\Programme\Borland\Delphi7\Projects"
-LN"C:\Programme\Borland\Delphi7\Projects"



barfuesser - Fr 05.09.03 08:20

Hi,

wie sehen Farbevon und TFarben aus?

barfuesser


dreamtheater - Fr 05.09.03 09:27


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TFarben=record
    BundMarkierung, Stimmhilfe, MarkNote, MarkTon, Hintergrund, Fixed, Noten, FixedFont:TColor;
  end;

var
  Farbevon:TFarben=(
      Bundmarkierung: $B1FEF9;
      Stimmhilfe: clSilver;
      MarkNote: clBlack;
      MarkTon: $007DD6FC;
      Hintergrund: $00E0FEFD;
      Fixed: $F0FBFF;
      Noten: clBlack;
      FixedFont: clBlack
      );


Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


barfuesser - Fr 05.09.03 09:43

Hallo,

mir fiel leider erst jetzt auf, daß der Inhalt der Datei ziemlich in Ordnung aussieht. Delphi legt nämlich eine Datei namens Projekt-Datei + '.cfg' an. Und diese Datei versuchst Du zu überschreiben. Wahrscheinlich verhindert Delphi den Zugriff auf diese Datei. Vielleicht restauriert sie Delphi aber auch selbsständig. Versuch doch erst einmal eine andere Datei zu nehmen oder eine neue zu erstellen.

barfuesser


dreamtheater - Fr 05.09.03 18:08

Oh, danke für den Tip, da hätte ich auch selbst draufkommen können :o)! Ich werd's ausprobieren, denn an den Namen Projekt.cfg bin ich keineswegs gebunden...