Entwickler-Ecke

Dateizugriff - WriteLn erzeugt EInOutError Fehler code 105!!!


Jeremy - Fr 10.10.03 18:29
Titel: WriteLn erzeugt EInOutError Fehler code 105!!!
Obwohl ich in eine Datei Schreiben will mit folgende code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
AssignFile(F, Form1.SaveDialog1.FileName);
     if FileExists(Form1.SaveDialog1.FileName) then
      begin
       Application.MessageBox('Datei existiert, soll es überschrieben werden??''Achtung!', mb_YesNo);
        if IdYes = 5 then
         begin
            Form1.Cipher.Create(Self);
            Form1.Cipher.InitStr(Key, TDCP_sha512);
              for I := 0 to Form1.Memo1.Lines.Count -1 do
               Form1.Cipher.EncryptString(Form1.Memo1.Lines[I]);
              end;
            Form1.Cipher.Burn;
            Form1.Cipher.Free;
          end;
          Reset(F, 1);
          for I:= 0 to Form1.Memo1.Lines.Count -1 do
           WriteLn(Form1.Memo1.Lines[I]); {Hier ist der übeltäter}
          end;
         CloseFile(F);

Der I/O Error 105 (Datei nicht geöffnet für lesezugriff)

Was ist falsch an mein code bitte???

Jeremy


Renegade - Fr 10.10.03 18:36

Moin erstmal!

Fehlt da nicht nocht

Reset(f)?

Gruß Renegade


Jeremy - Fr 10.10.03 19:03

Nö der ist drin wo müsste es sonst noch????


Klabautermann - Fr 10.10.03 19:59
Titel: Re: WriteLn erzeugt EInOutError Fehler code 105!!!
Hallo,
Jeremy hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
       Application.MessageBox('Datei existiert, soll es überschrieben werden??''Achtung!', mb_YesNo);
        if IdYes = 5 then

das ist schon mal Falsch. Die Abfrage ob idYes=5 ist, ist blödsinn. Wenn du auf die MessageBox Reagieren möchtest mu8ss das so aussehen:

Delphi-Quelltext
1:
 IF (Application.MessageBox('Datei existiert, soll es überschrieben werden??''Achtung!', mb_YesNo) = idYes) THEN ...                    


Jeremy hat folgendes geschrieben:

Delphi-Quelltext
1:
          Reset(F, 1);                    

Warum gibst du hier eine Blockgröße an? Ist f vom Typ Textfile? Dass muss es sein, damit ReadLn und WriteLn funktionieren. Dann kannst du es mit einem einfachen:

Delphi-Quelltext
1:
 Reset(f);                    

öffnen.

So ich hoffe der Übeltäter war dabei. Ansonsten einfach weiter fragen ;).

Gruß
Klabautermann


Anonymous - Fr 10.10.03 20:15

so ists richtig:


Delphi-Quelltext
1:
WriteLn(f, Form1.Memo1.Lines[I]); {Hier ist der übeltäter}                    


Es wird versucht die cmd-fkt aufzurufen, was bei einer nicht-konselenanwendung natürlich nicht geht.


MSCH - Fr 10.10.03 20:21

bin ich blind?
ich find den Code nicht, mit AssignFile(F,<Dateiname>). Also wenn ich nicht blind bin, dann fehlt er und Reset(F) geht ins blaue. In dem Falle IoError.

grez
msch


Anonymous - Fr 10.10.03 20:25

assignfile steht in der ersten zeile und reset da:


Delphi-Quelltext
1:
2:
3:
          Reset(F, 1); 
          for I:= 0 to Form1.Memo1.Lines.Count -1 do 
           WriteLn(Form1.Memo1.Lines[I]); {Hier ist der übeltäter}


das problem ist aber einfach nur, dass ein "F," als erster parameter von WriteLn fehlt.


Jeremy - Fr 10.10.03 21:17

Hi Leut,
Danke an alle für's feedback. Noch nochmalige betrachtung meine Code fiel mir auf das das ganze recht chaotisch ist. Ich werd noch mal alles über arbeiten. Wenn ich mal fertig bin mit der überarbeitung (hoffentlich morgen :? ) post ich das ganze so das andere anfänger (wie ich) auch mal davon lernen können!!!

Danke nochmal!!

Jeremy


Jeremy - Sa 11.10.03 14:49
Titel: Endlich geht's
ok der code ist nun überarbeitet, für die jenigen den es interessiert hier ist es
{unit 1}

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:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, DCPcrypt2, DCPsha512, DCPblockciphers,
  DCPcast256;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    VerschlsseltSpeichern1: TMenuItem;
    VerschlsseltSpeichern2: TMenuItem;
    AlsTextSpeichern1: TMenuItem;
    Beenden1: TMenuItem;
    Memo1: TMemo;
    Cipher: TDCP_cast256;
    Hash: TDCP_sha512;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure VerschlsseltSpeichern2Click(Sender: TObject);
    procedure SaveSecure(Sender: TObject);
  private
    { Private declarations }
  public
  published
    { Public declarations }
  end;

var
  Form1: TForm1;
  Key, Pressed, ToWrite: String;
  F: TextFile;
implementation

uses UnitPass;

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
Pressed := 'Abrechen';
end;

procedure TForm1.VerschlsseltSpeichern2Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.SaveSecure(Sender: TObject);
var I: Integer;
begin
 If FileExists(SaveDialog1.FileName) then
  Begin
  if (Application.MessageBox('Datei existiert, soll es überschrieben werden??''Achtung!', mb_YesNo) = idYes) then
   begin
    AssignFile(F, SaveDialog1.FileName);
    Rewrite(F);
    Cipher.InitStr(Key, TDCP_SHA512);
      For I:=0 to Memo1.Lines.Count -1 do
       begin
        ToWrite := Cipher.EncryptString(Memo1.Lines[i]);
        WriteLn(F, ToWrite);
       end;
      Cipher.Burn;
      Cipher.Free;
      CloseFile(F);
   end;
  end
   else
    begin
     AssignFile(F, SaveDialog1.FileName);
     ReWrite(F);
     Cipher.InitStr(Key, TDCP_SHA512);
      For I:=0 to Memo1.Lines.Count - 1 do
       Begin
        ToWrite := Cipher.EncryptString(Memo1.Lines[I]);
        WriteLn(F, ToWrite);
       end;
      Cipher.Burn;
      Cipher.Free;
      CloseFile(F);
     end;
 end;

end.

{unit 2}

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:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
unit UnitPass;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DCPsha512;

type
  TForm2 = class(TForm)
    KeyText: TStaticText;
    BtnOk: TButton;
    BtnAbrechen: TButton;
    KeyEdit: TMaskEdit;
    procedure BtnOkClick(Sender: TObject);
    procedure BtnAbrechenClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  F: File;
implementation

uses UnitMain;
{$R *.dfm}

procedure TForm2.BtnOkClick(Sender: TObject);
var
Key: String;
begin
Pressed := 'Ok';
If Pressed = 'Ok' then
 begin
     If KeyEdit.Text = '' then
      begin
       ShowMessage('Schlüssel muß mindestens 8 zeichen lang sein!');
      end
     else
      begin
       Key := KeyEdit.Text;
       Form2.Close;
      end;
 end;
end;
procedure TForm2.BtnAbrechenClick(Sender: TObject);
begin
Pressed := 'Abrechen';
KeyEdit.Clear;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.SaveDialog1.DefaultExt := 'sec';
Form1.SaveDialog1.FileName := 'Unbenannt';
Form1.SaveDialog1.Filter := 'sec';
Form1.SaveDialog1.Execute;
Form1.SaveSecure(Sender);
end;



end.


Es war doch nicht so schwer wie ich versucht habe alles zu machen. Danke nochmal an alle für die feedback! Hab von euch einiges gelernt!!

Danke nochmal
Jeremy