Ich habe den Code ein bisschen überarbeitet.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
myfile =
RECORD
name :
string[100];
email :
string[40];
end;
type
TForm1 =
class(TForm)
Button1: TButton;
Button2: TButton;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
procedure Lesen(Sender: TObject);
procedure Schreiben(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
meinedatei :
File Of myfile;
satz : myfile;
tmpIOResult : integer;
implementation
{$R *.dfm}
procedure TForm1.Lesen(Sender: TObject);
begin
if OpenDialog1.Execute
then
begin
OpenDialog1.FileName := ('
myfile.dat');
AssignFile(meinedatei, OpenDialog1.FileName);
// FileMode := fmShareDenyNone;
{$I-}
Reset(meinedatei);
tmpIOResult := IOResult;
{$I+}
If IOResult <> 0
Then
ShowMessage(OpenDialog1.FileName + '
nicht gefunden!' + #13
+ '
Code: ' + IntToStr(tmpIOResult))
Else
begin
try
Seek(meinedatei,0);
except
ShowMessage('
Datensatz nicht gefunden!');
end;
try
read(meinedatei,satz);
ShowMessage(satz.
name + #13 + satz.email);
except
CloseFile(meinedatei);
ShowMessage('
Datensatz nicht lesbar!');
end;
CloseFile(meinedatei);
end;
end;
end;
procedure TForm1.Schreiben(Sender: TObject);
begin
if SaveDialog1.Execute
then { Dialog zum Speichern anzeigen }
begin
SaveDialog1.FileName := '
myfile.dat';
AssignFile(meinedatei, SaveDialog1.FileName);
// FileMode := fmShareDenyNone;
{$I-}
Rewrite(meinedatei);
tmpIOResult := IOResult;
{$I+}
If IOResult <> 0
Then
begin
ShowMessage('
Kann die Datei nicht erstellen! Fehler: ' + IntToStr(tmpIOResult));
end
Else
begin
satz.
name := '
Test-Datensatz';
satz.email := '
info@testserver.de';
try
write(meinedatei, satz);
except
on E :
Exception do
begin
ShowMessage('
Schreibfehler in myfile.dat!' + #13
+ E.ClassName + '
, Meldung: ' + E.
Message);
end;
end;
CloseFile(meinedatei);
ShowMessage('
myfile.dat erfogreich erstellt.');
end;
end;
// von SaveDialog1
end;
end.
Version 1.
Das Programm ist mit dem Delphi 2010 Compiler erzeugt. Mit der Prozedur "Schreiben" möchte ich zuerst die Datei erzeugen.
Bei 32-Bit Windows Versionen (von Windows XP bis Windows 7) überhaupt keine Probleme.
Bei Windows 7 Ultimate 64-Bit kommt zuerst
"Schreibfehler in myfile.dat!
EInOutError, Meldung: Dateizugriff verweigert"
und direkt danach "E/A-Fehler 103"
Version 2.
Das Programm ist mit dem Delphi 3 Client/Server Compiler aus dem Jahr 1997 erzeugt und macht alles sauber von Windows XP bis 7, egal ob 32- oder 64-Bit (auch bei der oben genannten x64 Ultimate).
Und was nun?