AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language FileStream mit "TIniFile Funktionalität".Methoden
Thema durchsuchen
Ansicht
Themen-Optionen

FileStream mit "TIniFile Funktionalität".Methoden

Ein Thema von Bjoerk · begonnen am 26. Mai 2014 · letzter Beitrag vom 28. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 14:13
Delphi-Version: 2007
Ich würde gerne eine FileStream Klasse schreiben die ich wie eine IniFile behandeln kann. Wie könnte man denn sowas machen? Ich habe gedacht daß ich einen Header anlege in der ich die nötigen Infos speichere. Nur, wie könnte so ein Header aussehen? Oder ist das Ganze Blödsinn?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 14:23
Du willst eine Klasse von TFileStream ableiten und dann um Methoden von TIniFile erweitern?

Lass mich kurz überlegen: Ja, das ist Blödsinn
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 14:36
Juut. Einverstanden.

Dann anders rum. Wie krieg ich eine emf in eine IniFile. Auch Blödsinn?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 14:39
Juut. Einverstanden.

Dann anders rum. Wie krieg ich eine emf in eine IniFile. Auch Blödsinn?
Nö, du bekommst quasi alles in ein IniFile mit Delphi-Referenz durchsuchenTiniFile.WriteBinaryStream
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 14:42
Meintest Du vielleicht eher TIniFile.WriteBinaryStream?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 14:55
Okay. Wenn das funktioniert? Wäre mir ja auch viel lieber. Ich werf mal einen Blick in die inifiles.pas. Melde mich ggf. nochmal. Thanx!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 15:30
TCustomIni (der Vorfahre von TIniFile) ... das kann man gern verwenden und ihm, statt der INI-Datei-WinAPI, ein anderes Backend verpassen.
TStringListe mit Names/Values (ist wie eine INI, aber mit nur einer einzigen Section)
TStringStream
TTextReader
TTextWriter
TBinaryReader
TBinaryWriter
TStringReader
TStringWriter

TStreamWriter
TStreamReader
...


Das Delphi-Referenz durchsuchenRead, Delphi-Referenz durchsuchenReadLn, Delphi-Referenz durchsuchenWrite und Delphi-Referenz durchsuchenWriteLn des alten Delphi-Referenz durchsuchenAssignFile
$2B or not $2B

Geändert von himitsu (26. Mai 2014 um 15:34 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 16:03
Okay. Ich hab's jetzt erst mal so probiert. Funzt einwandfrei.
Delphi-Quellcode:
function TMemIniFileEx.ReadMetaFile(const Section, Name: string;
  Value: TMetaFile): integer;
var
  MemoryStream: TMemoryStream;
begin
  MemoryStream := TMemoryStream.Create;
  try
    Result := ReadBinaryStream(Section, Name, MemoryStream); // integer, kein int64
    MemoryStream.Position := 0;
    Value.LoadFromStream(MemoryStream);
  finally
    MemoryStream.Free;
  end;
end;

procedure TMemIniFileEx.WriteMetaFile(const Section, Name: string;
  Value: TMetaFile);
var
  MemoryStream: TMemoryStream;
begin
  MemoryStream := TMemoryStream.Create;
  try
    Value.SaveToStream(MemoryStream);
    MemoryStream.Position := 0;
    WriteBinaryStream(Section, Name, MemoryStream);
  finally
    MemoryStream.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 16:17
Bis auf die Tatsache, dass du dich jetzt mit einem TMemIniFile verheiratet hast sieht das doch gut aus.

Wenn du eine Klasse geschrieben hättest, die etwas näher bei deiner Anwendung und etwas weiter weg von TMemIniFile ist, dann wäre das flexibler.

Delphi-Quellcode:
type
  TFoo = class( TCustomIniFile )
  private
    FIniFile : TCustomIniFile;
  public
    constructor Create( AIniFile : TCustomIniFile );

    // Alle Methoden auf die interne FIniFile umleiten

    procedure WriteMetaFile( const Section, Name : string; const Value : TMetaFile );
    procedure ReadMetaFile( const Section, Name : string; const Value : TMetaFile );
  end;

constructor TFoo.Create( AIniFile : TCustomIniFile );
begin
  inherited Create;
  if not Assigned( AIniFile )
  then
    raise EArgumentNilException.Create( 'TFoo: AIniFile' );
  FIniFile := AIniFile;
end;

procedure TFoo.WriteMetaFile( const Section, Name : string; const Value : TMetaFile );
var
  LStream : TStream;
begin
  LStream := TMemoryStream.Create;
  try
    Value.WriteToStream( LStream );
    LStream.Position := 0;
    FIniFile.WriteBinaryStream( Section, Name, LStream );
  finally
    LStream.Free;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (26. Mai 2014 um 16:23 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: FileStream mit "TIniFile Funktionalität".Methoden

  Alt 26. Mai 2014, 16:48
Okay. Meistens arbeite ich aber mit einen eigenen IniFileParser. Der liest die Ini mit Assignfile und Co als TextFile ein. Wenn ich dort jetzt die Methoden (ReadMetaFile, ReadBinaryStream bzw. WriteMetaFile, SaveToStream) ergänze geht das dann noch als TextFile?
Delphi-Quellcode:
function TStrIniFile.LoadFile: boolean;
var
  F: TextFile;
  S: string;
  Buf: array [1..65536] of Char;
begin
  Result := false;
  if IniFileExists then
  begin
    AssignFile(F, FFileName);
    SetTextBuf(F, Buf);
    if CanOpenFile(F, false) then
    begin
      while not Eof(F) do
      begin
        Readln(F, S);
        if IsIniLine(S) then
          AddItem(S);
      end;
      CloseFile(F);
      Result := true;
    end;
  end;
end;

function TStrIniFile.SaveFile: boolean;
var
  F: TextFile;
  I: integer;
  Buf: array [1..65536] of Char;
begin
  Result := false;
  if FFileName <> 'then
  begin
    AssignFile(F, FFileName);
    SetTextBuf(F, Buf);
    if CanOpenFile(F, true) then
    begin
      for I := 0 to FCount - 1 do
      begin
        if I > 0 then
          if FEqualSignPos[I] < 0 then
            Writeln(F);
        Writeln(F, FItems[I]);
      end;
      CloseFile(F);
      Result := true;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:49 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