Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Datei komplett in einen String lesen (https://www.delphipraxis.net/167135-datei-komplett-einen-string-lesen.html)

idefix2 14. Mär 2012 20:44

Datei komplett in einen String lesen
 
Hallo,

ich suche eine Funktion, mit der ich ein komplettes File in einen String laden kann? Ich habe in der Hilfe etwas herumgesucht und nur die Windows readfile Funktion gefunden. Gibt es da etwas weniger "systemnahes" oder muss ich mir das selbst basteln?

Christian Seehase 14. Mär 2012 20:46

AW: Datei komplett in einen String lesen
 
Moin,

schau Dir doch mal TFileStream an.

Luckie 14. Mär 2012 20:53

AW: Datei komplett in einen String lesen
 
Wie wäre es mit einer StringListe?

Jens01 14. Mär 2012 20:54

AW: Datei komplett in einen String lesen
 
Geht das vielleicht mit der StringList. Irgendwo kann man die ganze Liste zu einem string machen. .. glaub ich

Panthrax 14. Mär 2012 20:59

AW: Datei komplett in einen String lesen
 
Delphi-Quellcode:
function FileLoad(const Filename: String; const Encoding: TEncoding = nil): String;
var
  Strings: TStrings;
begin
  Strings := TStringList.Create;
  try
    Strings.LoadFromFile(Filename, Encoding);
    Result := Strings.Text;
  finally
    Strings.Free;
  end;
end;

Popov 14. Mär 2012 21:21

AW: Datei komplett in einen String lesen
 
Suchst du sowas? Ist aus einem alten Projekt, keine Ahnung ob es noch funktioniert. Ich habe auch noch die Save Funktion dazu gepackt, für den Fall, dass du den String auch wieder speichern willst.

Delphi-Quellcode:
function LoadStringFromFile(sInFile: String; var sFileString: String): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  if not FileExists(sInFile) then Exit;
  FileStream := TFileStream.Create(sInFile, fmOpenRead);
  try
    if FileStream.Size <> 0 then begin
      SetLength(sFileString, FileStream.Size);
      FileStream.Read(sFileString[1], FileStream.Size);
      Result := True;
    end;
  finally FileStream.Free end;
end;

function SaveStringToFile(sOutFile: String; sFileString: String): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  FileStream := TFileStream.Create(sOutFile, fmCreate);
  try
    if Length(sFileString) <> 0 then begin
      FileStream.Write(sFileString[1], Length(sFileString));
      Result := True;
    end;
  finally FileStream.Free end;
end;

idefix2 14. Mär 2012 21:48

AW: Datei komplett in einen String lesen
 
danke, ich werde die beiden Varianten probieren. LoadStringFromFile könnte ja um einiges schneller sein, falls es noch funktioniert - ich fürchte allerdings, dass die Routine so mit den aktuellen 16-Bit-Characters nicht mehr funktionieren wird, wenn das File mit einem 8-Bit Zeichensatz geschrieben wurde.

himitsu 14. Mär 2012 21:57

AW: Datei komplett in einen String lesen
 
Nicht nur das.

LoadStringFromFile ließt natürlich nur als Unicode ein, aber es wird nur der halbe String behandelt, weil die Bytegröße nicht angepaßt wird.
Spätestens ab Delphi 2009 muß also entweder die Datengröße an die des Chars an gepaßt werden,
oder man sellt alles auf AnsiString um.

Mit einem StringStream oder einer StringList hat man den Vorteil (ab D2009) auch verschiedene Textcodierungen einzulesen, da dort intern eine Konvertierung eingebaut wurde.

p80286 14. Mär 2012 22:06

AW: Datei komplett in einen String lesen
 
Da frage ich mich doch wofür das gut sein soll. Natürlich kann man eine Datei, bzw. ihren Inhalt in einen String packen, aber wofür soll das gut sein?
Wie wäre es denn stattdessen ein Array of Byte (Array of AnsiChar) zu nutzen?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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