Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Datei mit Steuerzeichen in StringList laden? (https://www.delphipraxis.net/193195-datei-mit-steuerzeichen-stringlist-laden.html)

SneakyBagels 4. Jul 2017 08:16

Datei mit Steuerzeichen in StringList laden?
 
Ist es möglich mit einer normalen StringList (oder etwas anderem was bei Delphi dabei ist) eine Datei die die, die man in folgendem Verzeichnis findet in einen String zu laden?
Ziel ist es: ich möchte einen SubString in der Datei finden und dafür keine extra 3rd Party Unit verwenden.

=> C:\Users\<name>\AppData\Roaming\Microsoft\Windows\ Recent\CustomDestinations

TiGü 4. Jul 2017 08:34

AW: Datei mit Steuerzeichen in StringList laden?
 
Es ist alles möglich.
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes;

var
  Stream: TStringStream;
  filename: string;
begin
  try
    filename := 'C:\Users\Horst\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations\e0e944739d076ab.customDestinations-ms';

    Stream := TStringStream.Create;
    Stream.LoadFromFile(filename);
    Writeln(Stream.DataString);
    Stream.Free;
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

SneakyBagels 4. Jul 2017 08:40

AW: Datei mit Steuerzeichen in StringList laden?
 
An Streams habe ich noch nicht gedacht.
Leider ist bei mir DataString immer leer. Selbst wenn die Datei offensichtlich eine Größe > 0Byte hat.

Uwe Raabe 4. Jul 2017 09:13

AW: Datei mit Steuerzeichen in StringList laden?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1375901)
Ist es möglich mit einer normalen StringList (oder etwas anderem was bei Delphi dabei ist) eine Datei die die, die man in folgendem Verzeichnis findet in einen String zu laden?

Ist es: TFile.ReadAllText

TiGü 4. Jul 2017 09:25

AW: Datei mit Steuerzeichen in StringList laden?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1375907)
An Streams habe ich noch nicht gedacht.
Leider ist bei mir DataString immer leer. Selbst wenn die Datei offensichtlich eine Größe > 0Byte hat.

Wie groß ist denn Stream.Size nach dem laden?

SneakyBagels 4. Jul 2017 09:32

AW: Datei mit Steuerzeichen in StringList laden?
 
Zitat:

TFile.ReadAllText
Auch TFile.ReadAllText hat Probleme mit den .customDestinations-ms-Dateien und zeigt keinen Inhalt an (showmessage)

Zitat:

Wie groß ist denn Stream.Size nach dem laden?
Das weiß ich nicht ich habe wieder alles gelöscht was mit Streams zu tun hatte. Es war vermutlich aber 0.

Zum Vergleich: diese Unit schafft es die Dateien zu lesen
http://www.delphipraxis.net/151898-s...ei-reader.html

TiGü 4. Jul 2017 09:49

AW: Datei mit Steuerzeichen in StringList laden?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1375917)
Das weiß ich nicht ich habe wieder alles gelöscht was mit Streams zu tun hatte. Es war vermutlich aber 0.

Das Öffnen der IDE dauert in der Regel länger als das einkopieren meines Quelltextes, die Anpassung des Pfades und das Drücken von F9.
So debugge er es hin!

SneakyBagels 4. Jul 2017 10:01

AW: Datei mit Steuerzeichen in StringList laden?
 
Size ist nicht 0.
Size entspricht der Dateigröße in Bytes.

Uwe Raabe 4. Jul 2017 10:01

AW: Datei mit Steuerzeichen in StringList laden?
 
Zitat:

Zitat von SneakyBagels (Beitrag 1375917)
Zitat:

TFile.ReadAllText
Auch TFile.ReadAllText hat Probleme mit den .customDestinations-ms-Dateien und zeigt keinen Inhalt an (showmessage)

Das liegt dann wohl daran, daß das eben keine reinen Textdateien sind und das erste 0-Byte den String terminiert. In dem Fall würde ich dann TFile.ReadAllBytes empfehlen.

Der schöne Günther 4. Jul 2017 10:03

AW: Datei mit Steuerzeichen in StringList laden?
 
Haben wir denn eine konkrete Beispiel-Datei? Wenn ich mitten in eine "Text"-Datei ein Nullbyte reinpacke hat ReadAllText damit kein Problem:

Delphi-Quellcode:
uses
   System.SysUtils,
   System.Classes,
   System.IoUtils;
const
   filePath = 'x:\someFile.dat';
   DLE = 16;
   NULL = 0;
var
   bytes: TBytes;
   stream: TStream;
   fileContent: String;
begin
   // 1) Datei schreiben
   TFile.WriteAllText(filePath, 'Vor Steuerzeichen');
   bytes := [DLE, NULL];
   stream := TFile.OpenWrite(filePath);
   try
        stream.Seek(0, TSeekOrigin.soEnd);
      stream.Write(bytes, 2);
   finally
      stream.Destroy();
   end;
   TFile.AppendAllText(filePath, 'Nach Steuerzeichen');

   // 2) Datei lesen (einfach)
   fileContent := TFile.ReadAllText(filePath);
   WriteLn( fileContent.QuotedString());

   ReadLn;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 Uhr.
Seite 1 von 3  1 23      

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