AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verständnisfrage Dateien in Objekten

Verständnisfrage Dateien in Objekten

Ein Thema von FragenderHerbert · begonnen am 12. Dez 2013 · letzter Beitrag vom 13. Dez 2013
 
FragenderHerbert

Registriert seit: 4. Dez 2013
47 Beiträge
 
#1

Verständnisfrage Dateien in Objekten

  Alt 12. Dez 2013, 09:08
Hallo liebe Delphianer,

ich bin so gut wi neu hier, habe Euch durch Stöbern im Internet gefunden und auch schon hier im Forum ein wenig geblättert. Leider programmiere ich noch nicht allzu lange. Ich möchte es aber gerne lernen und da habe ich schon das erste Prorblem, das ich mir nicht erklären kann.

Ich habe diese Unit geschrieben.

Delphi-Quellcode:
unit UByteStream;

interface

uses
  Sysutils, Classes;


type
  PByteStream = ^TByteStream;
  TByteStream = Class(TObject)
  private
    FFile: File Of Byte;
    FFileName: String;
  public
    constructor Create(AFileName: String; Mode: Word);
    destructor Destroy; override;
    function ReadByte: Byte;
    function Read(var Buffer: array of byte; BufSize: Longint): Longint;
    procedure WriteByte(b: Byte);
    function Write(var Buffer: array of byte; BufSize: Longint): Longint;
    function Position: Longint;
    function Size: Longint;
    procedure Seek(APos: Longint; Flag: Word);
  End;


implementation


{ TByteStream }

constructor TByteStream.Create(AFileName: String; Mode: Word);
var IResult: Integer;
begin
  inherited Create;
  System.Assign(FFile, FFileName);
  {$I-}
  if (Mode=fmOpen) or (Mode=fmOpenRead) then
  begin
    System.Reset(FFile);
    IResult := System.IOResult;
    if IResult <> 0 then fail;
  end
  else
  if Mode = fmCreate then
  begin
    System.Rewrite(FFile);
    IResult := IOResult;
    if IResult <> 0 then fail;
  end;
  {$I+}
end;

destructor TByteStream.Destroy;
begin
  System.Close(FFile);
  inherited Done;
end;

function TByteStream.ReadByte: Byte;
var b: Byte;
begin
  System.Read(FFile, b);
  Result := b;
end;

function TByteStream.Read(var Buffer: array of byte; BufSize: Longint): Longint;
var Count,Current,BufStart,BufEnd,BufPos: Word;
begin
  BufStart := Low(Buffer);
  BufEnd := High(Buffer);
  BufPos := BufStart;
  Current := System.FilePos(FFile);
  Count := Current;
  while Count < Current + BufSize do
  begin
    System.Read(FFile, Buffer[BufPos]);
    inc(BufPos);
    inc(Count);
  end;
  Result := Count - Current;
end;

procedure TByteStream.WriteByte(b: Byte);
begin
  System.Write(FFile, b);
end;

function TByteStream.Write(var Buffer: array of byte; BufSize: Longint): Longint;
var Count,Current,BufStart,BufEnd,BufPos: Word; x: array[0..1023] of byte absolute Buffer;
begin
  BufStart := Low(Buffer);
  BufEnd := High(Buffer);
  BufPos := BufStart;
  Current := System.FilePos(FFile);
  Count := Current;
  while Count < Current + BufSize do
  begin
    System.Write(FFile, Buffer[BufPos]);
    inc(BufPos);
    inc(Count);
  end;
  Result := Count - Current;
end;

function TByteStream.Position: Longint;
begin
  Result := System.FilePos(FFile);
end;

function TByteStream.Size: Longint;
begin
  Result := System.FileSize(FFile);
end;

procedure TByteStream.Seek(APos: Longint; Flag: Word);
begin
  case Flag of
    soFromBeginning: System.Seek(FFile, APos);
    soFromCurrentPos: ;
    soFromEnd: ;
  end;
end;

end.
Bei Anwendung dieser Unit erhalte ich aber einen Fehler:

"Datei nicht geöffnet". Warum ist das so?

Delphi-Quellcode:
type
  TReader = class(TObject)
   private
    MeineBytes: TByteStream;
   public
    constructor Create(Filename: String);
    destructor Destroy; override;
    procedure ReadBytes;
  end;

implementation

constructor Create(Filename: String);
begin
  inherited Create;
  MeineBytes := TByteFile.Create(FileName, fmOpen);
end;

destructor Destroy;
begin
  MeineBytes.Free;
  inherited Destroy;
end;

procedure ReadBytes;
begin
  //hier sollten die Bytes aus der Datei nun gelesen werden
  //Aber die Datei ist nicht geöffnet
end;

end.
Entweder ich bin betriebsblind und habe was entscheidendes übersehen oder eine Datei kann in einer Klasse nicht geöffnet werden.

Wenn letzteres zutrifft, warum ist das so. Ich möchte die Zusammenhänge gerne verstehen.

Wer kann mir helfen?
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz