Autor Beitrag
mmmichael
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 13.01.06 21:17 
Hallo!

Im tollen Windows Editor kann man ja jede beliebige Datei öffnen. So z.B. auch ein JPEG-Datei, das sieht dann halt doof aus aber da kann man nichts machen.

Jetzt möchte ich in Delphi das gleiche machen, sprich den "Text" irgendeiner Datei (gleich welchen Typs) auslesen. Nur geht das nicht so recht.
Wenn ich so tue als wäre die datei ein textfile liest mein programm irgendwie nur die ersten paar buchstaben und mit nem stream will das nicht so recht...

Also, was tun?

Gruß MMMichael
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 13.01.06 22:17 
user profile iconmmmichael hat folgendes geschrieben:
Wenn ich so tue als wäre die datei ein textfile liest mein programm irgendwie nur die ersten paar buchstaben

Klar, beim ersten #0-Zeichen ist Schluss! Du muss also dieses Zeichen in ein anderes ändern, um die gelesenen Bytes darstellen zu können. Um jede beliebige Datei auszulesen, arbeitest du am Besten mit BlockRead in einer repeat-until-Schleife, darin änderst die #0-Zeichen im aktuell gelesenen Teil in meinetwegen Leerzeichen, hängst das dann an eine String-Variable, liest weiter, änderst wieder, hängst wieder an usw. bis die gesamte Datei ausgelesen ist. Du hast dann in deiner String-Variable den gesamten, aber mitunter nicht mehr originalen Dateiinhalt, weil du ja #0 in Leerzeichen geändert hast.

Zum Schluss schreibst du die String-Variable in ein Memo oder RichEdit. Soviel ich weiss, kann man #0 in einem Memo oder RichEdit nicht darstellen, aber vielleicht gibt's Kompos, mit denen das geht.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
mmmichael
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 14.01.06 19:21 
user profile icongalagher hat folgendes geschrieben:
Du hast dann in deiner String-Variable den gesamten, aber mitunter nicht mehr originalen Dateiinhalt, weil du ja #0 in Leerzeichen geändert hast.

Und wenn ich den originalen Inhalt benötige? Ich möchte den nämlich verschlüsseln und wenn der dateiinhalt geändert wird ist ja alles für die katz... :?!?:
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 15.01.06 09:04 
user profile iconmmmichael hat folgendes geschrieben:
Und wenn ich den originalen Inhalt benötige? Ich möchte den nämlich verschlüsseln und wenn der dateiinhalt geändert wird ist ja alles für die katz... :?!?:

Zum blossen Darstellen kannst du ihn ja ändern, zum Verschlüsseln verwendest du den unveränderten String. Die Daten sind ja da, bloss können die #0-Zeichen nicht dargestellt werden. Das liegt an der Memo- oder Richedit-Komponente. Aber wie gesagt, vielleich gibt es Komponenten, die das können, und mit denen du dir den Umwandlungsaufwand ersparst.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
thkerkmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20

Windows 7
Delphi 2010 Professional
BeitragVerfasst: So 15.01.06 21:04 
Hi,

versuchs mal so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  fs: tFilestream;
  inhalt: string;
begin
  fs := tFileStream.Create(dateiname, fmOpenRead);
  SetLength(inhalt, fs.size);
  fs.Read(pChar(inhalt)^, fs.size);
  fs.Free;
  ...


jetzt kannst Du mit dem string arbeiten.
wenn Du ihn in ein Memo tust, werden natürlich nicht alle Zeichen angezeigt.
das macht der Windows Editor auch nicht, aber es geht ja um die Verschlüsselung
und eine binäre Datei kann man ja nicht als Text lesen, aber der String
enhält in der Tat alle Zeichen deiner Datei und hat auch die korrekte Länge.

Gruss

Thomas