Einzelnen Beitrag anzeigen

MSerror

Registriert seit: 28. Jan 2010
10 Beiträge
 
Delphi 2010 Professional
 
#55

AW: Fehlermeldung bei AssignFile

  Alt 11. Feb 2011, 20:19
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?

Geändert von MSerror (11. Feb 2011 um 20:23 Uhr) Grund: Code-Korrektur
  Mit Zitat antworten Zitat