Autor Beitrag
Jukka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 107

Win XP Pro
Delphi 7
BeitragVerfasst: Sa 30.09.06 14:26 
Problem erledigt hab es mit Streams gelöst

Hallo,

Ich hab ein Problem mit untypisierten Dateien. Ich speichere mehere records in eienr datei und lese diese danach aus, bei ~2000 Einträgen geht alles noch ganz normal, bei ~20000 ist dies schon etwas anders:

Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInOutError aufgetreten. Meldung: 'E/A-Fehler 1784'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------


der Code:

ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
type
  TEntries = packed record
              name,
              genre,
              autor: string;
              price,
              count: Integer;
             end;

procedure TForm1.Button1Click(Sender: TObject);
var
  F    : File;
  Entries : array of TEntries;
  i, count  : Integer;

begin
  AssignFile(F, 'J:\1.txt');
  ReWrite(F, 1);

    setLength(Entries,21001); // 21000 Einträge dann

  for i:=1 to length(Entries)-1 do begin
    Entries[i].name := 'Name'+inttostr(i);
    Entries[i].genre := 'Genre'+inttostr(i);
    Entries[i].autor := 'Autor'+inttostr(i);
    Entries[i].price := i*1;
    Entries[i].count := i*10;
  end;  // Nur zum Testen füllen

  BlockWrite(F, Entries, length(Entries));
  CloseFile(F);

  FileMode := fmOpenRead;
  Reset(F, 1);
  BlockRead(F, Entries, trunc(sizeof(Entries)/sizeof(TEntries)), count);  // Fehlerzeile bei 20000
  //for i := 1 to length(Entries)-1 do
  //  ShowMessage(Entries[i].name);
  
ShowMessage(inttostr(length(Entries)-1)+' Einträge');


  CloseFile(F);
end;


Falls dies eine variante ist die nicht optimiert idt o.ä., ich bin noch nichtd er Delphi Experte shclichtweg ich hab erst vor einiger zeit angefangen.

Jukka[b]
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Sa 30.09.06 21:31 
Geht das überhaupt das du Records mit Strings so einfach in 'ne Datei speicherst?

Das Strings in Delphi nunmal nicht so "simpel" gespeichert werden wie z.B. Integer speicherst Du u.U. eh nur Pointer für deine Strings.

Ändere mal deine Typdefintion:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  TEntries = packed record
              name,
              genre,
              autor: string[255];
              price,
              count: Integer;
             end;


Damit hast du dann Shortstrings die sich in eine Typisierte Datei speichern lassen.

Aber wieso überhaupt typisierte Dateien. Wenns "modern" sein soll würde ich XML nehmen oder speichere es lieber als (Tabseparierte) Textdatei.