Hallo Miteinander,
ich habe nun einige Tage versucht das Problem in den Griff zu bekommen.
Mit dem untenstehenden Testprogramm bin ich nach wie vor auf ca 150 Dateien a 2 KB die eingelesen werden können gekommen.
Will ich mehr als 200 Dateien einlesen, dann wird nichts aber auch gar nichts im Memo und in der
TListBox angezeigt. Und das Ganze ohne eine Message oder sonstige Meldungen.
Ab dem Memobereich findet dann bei mir in meinem Programm die Weitere Verarbeitung statt.
Es muss doch möglich sein mit diesem Grundgerüst von Code bis zu 200 Dateien oder über 200 Dateien bis ca. 2500 oder mehr einzulesen.
Ich denke das es bestimmt jemanden gibt, der mehr als 150 Dateien in einem Batch einliest.
Tests mit handelsüblichen Büroanwendungsprogrammen haben aber auch erstaunliches zu Tage gebracht
z. B. max. 41 Dateien die eingelesen werden.
Hier nun das Testprogramm:
Delphi-Quellcode:
unit Textread;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 =
class(TForm)
BitBtn1: TBitBtn;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
Edit1: TEdit;
ListBox1: TListBox;
BitBtn2: TBitBtn;
Label1: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Datei : Textfile;
Zeilenpuffer :
String;
j : integer;
begin
if OpenDialog1.Execute
then
for j := 0
to opendialog1.Files.Count-1
do
begin
AssignFile(Datei, OpenDialog1.Files[j]);
ListBox1.Items.Add(IntToStr(j+1)+'
'+OpenDialog1.Files[j]);
{$I-}
Reset(Datei);
{$I+}
if IOResult <> 0
then
begin
MessageDlg('
Fehler beim Zugriff auf die Datei', mtWarning, [mbOk], 0);
exit;
halt
end
else
while not EOF(Datei)
do
Begin
Readln( Datei, Zeilenpuffer);
Memo1.Lines.Add(Zeilenpuffer);
end;
{Reihe:=Reihe+1;}
Edit1.Text:=IntToStr(Opendialog1.Files.Count);
CloseFile(Datei);
end;
{End OpenDialog1}
end;
{End BitBtn1.Click}
procedure TForm1.BitBtn2Click(Sender: TObject);
var
i : longint;
begin
Memo1.Lines.Clear;
with ListBox1.Items
do
begin
for i:=0
to ListBox1.Items.Count-1
do
begin
ListBox1.Items.Delete(ListBox1.Items.Count-1);
end;
end;
Edit1.Text:=IntToStr(ListBox1.Items.count);
end;
end.
Ob die Dateien wirklich geschlossen wurden konnte ich bis Dato nicht ermitteln :-((
Aber das CloseFile müsste an der richtigen Stelle sein, da alle anderen Variationen nicht Zielführend waren.
Irgendjemand muss doch auch das selbe Problem schon mal gelöst haben. Zumal es sich um einen Standard Dialog handelt. Die BOH und die Handbücher halten sich da auch bedeckt zu dem Thema.
Ich möchte nur den eingeschlagenen Programmierweg beibehlaten, da dahinter bereits sehr viel anderes auf dem Code basiert.
Wäre nett wenn mir jemand die Lösung verraten könnte.
Schöne Grüße