AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadFile und WriteFile

Ein Thema von Schwedenbitter · begonnen am 29. Jun 2008 · letzter Beitrag vom 1. Jul 2008
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Re: ReadFile und WriteFile

  Alt 29. Jun 2008, 22:55
@ Alle

Es stimmt, der Code funktioniert auch bei mir. Erstmal danke für den Tipp mit SysErrorMessage(GetLastError). Das kannte ich nicht.
Allerdings ist mein Code von oben nur ein Ausschnitt. Wenn ich den nehme, mit Delphi ein neues Programm aufmache, den Teil reinkopiere und ausführen lasse, dann klappt es. Der Fehler muss also am Rest des Codes liegen. Deshalb hier mal alles:
Delphi-Quellcode:
Procedure TForm1.Start1Click(Sender: TObject);
Var
   I               : Word;
   NR,SB            : Cardinal;
   Buffer         : Array [1..5120] Of Byte;
   FHandle         : Cardinal;
   E1,E2,CB         : Boolean;
Begin
   Ende:=False;
   SB:=SizeOf(Buffer);
   {Tastenstatus merken und deaktivieren}
   E1:=Edit1.Enabled;
   Edit1.Enabled:=False;
   E2:=Edit2.Enabled;
   Edit2.Enabled:=False;
   CB:=CB1.Enabled;
   CB1.Enabled:=False;
   Start1.Visible:=False;
   Stop1.Visible:=True;
   {Puffer mit Zufallszahlen füllen}
   Randomize;
   FillChar(Buffer,SB,0);
   For I:=1 To SB Do
   Begin
      Buffer[I]:=Random(256);
   End;
   {Datei anlegen}   
   FHandle:=CreateFile(PChar(Edit1.Text),
                       GENERIC_READ or GENERIC_WRITE,
                       0,
                       nil,
                       CREATE_ALWAYS,
                       FILE_FLAG_NO_BUFFERING or FILE_FLAG_WRITE_THROUGH,
                       0);
   { Jetzt schreiben}
   If FHandle<>INVALID_HANDLE_VALUE Then
   Begin
      If CB1.Checked Then
      Begin
         Repeat
            WriteFile(FHandle,Buffer,SB,NR,nil);
            Application.ProcessMessages;
         Until (NR<SB) Or Ende;
      End
      Else
      Begin
         If WriteFile(FHandle,Buffer,SB,NR,nil)
            Then ShowMessage(IntToStr(NR))
         Else ShowMessage('Mist: '+SysErrorMessage(GetLastError));
      End;
      {Datei schließen}
      //FileClose(FHandle);
   End;
   {Tastenstatus wiederherstellen}
   Edit1.Enabled:=E1;
   Edit2.Enabled:=E2;
   CB1.Enabled:=CB;
   Start1.Visible:=True;
   Stop1.Visible:=False;
End;
Wie gesagt: Das Anlegen klappt, nur die Datei ist leer.
Edit1 ist TEdit und fragt den Dateinamen ab.
Edit2 ist TEdit und fragt die Größe ab -> noch nicht implementiert.
CB1 ist TCheckBox und gibt an, ob der Datenträger voll (NR<SB) geschrieben werden soll: Beide Varianten produzieren nur eine 0-Byte-Datei.

Existiert die Datei nicht und wird neu angelegt, bringt mir SysErrorMessage(GetLastError) die Meldung Falscher Parameter. Was mir das sagen soll, weiß ich nicht. Wenn die Datei nur überschrieben wird, kommt überhaupt keine Meldung <--- Das verstehe ich nun überhaupt nicht. Nach meinem begrenzten Verständnis müsste doch immer eine Meldung kommen: Entweder mit Fehler oder mit den geschriebenen Bytes. Das Programm stürzt auch nicht ab, sondern tut weiter so als wäre nichts gewesen...

XP SP3 (32bit) mit allen Patches nach SP3.

Dankbar für weitere Ideen und Gute Nacht

Alex
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz