És ha nem az Assign-t használnád, hanem mondjuk TFileStream-et?
Pl mint az alábbi kódban: (a form tartalmaz egy gombot, egy opendialogot és egy listboxot, a form fomrcreate eseménye, valamint a gomb onclick eseménye van megírva, semmi extra beállítás)
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
fFileName: string;
fByteFileStream: TFileStream;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
i, db : integer;
adat: byte;
begin
adat:=0;
if Opendialog1.Execute then fFileName:=UTF8toSys(OpenDialog1.FileName);
if fFileName<>'' then
begin
fByteFileStream:=TFileStream.Create(fFileName,fmOpenRead);
db:=fByteFileStream.Size div SizeOf(Byte);
for i:=1 to db do
begin
fByteFileStream.Read(adat,SizeOf(Byte));
Listbox1.Items.Add(IntToStr(Adat));
end;
fByteFileStream.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fFileName:='';
end;
end.
Windows 7-en csont nélkül beolvassa az Árvíztűrő tükörfúrógép.abc nevű fájlt, ami bájt típusú adatokat tartalmaz. Az adatokat tartalmazó fájlt az alábbi kis program hozta létre:
program general;
{$mode objfpc}{$H+}
var
f : File of Byte;
x : byte;
i : integer;
begin
randomize;
assignfile(f,'adatok.abc');
ReWrite(f);
for i:=1 to 50 do
begin
x:=random(255);
Write(f,x);
end;
CloseFile(f);
end.
A fájlt kézzel, a windows intéző segítségével, neveztem át a kívánt fájlnévre.
A teljes forráskódot letöltheted innen:
dl.dropboxusercontent.com/u/2766266/ekezetes2.zip
Közben kipróbáltam XP alatt is működik és az AssignFile használatával sem volt semmi gond. Szerintem ne közvetlenül az Opendialog.Filename változót használd, hanem ennek a tartalmát tedd át egy akármilyen string típusú változóba, ahogy én is csináltam, lehet ez a probléma oka.