Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TMemo.Lines.LoadFromFile() (https://www.delphipraxis.net/130566-tmemo-lines-loadfromfile.html)

asusbob 10. Mär 2009 18:56


TMemo.Lines.LoadFromFile()
 
Ist bei diesem Aufruf eine Exceptionbehandlung notwendig? Selbst wenn ich Stuss als Pfad angebe gibt es keine, aber kann ich das als Grundlage dafür nehmen, wo kann ich das denn nachlesen, in der Delphi Hilfe steht diesbezüglich nichts...

Also der Aufruf sieht folgendermaßen aus:

Delphi-Quellcode:
memFileContent.Lines.LoadFromFile(sPath);
Viele Grüße
Till

DeddyH 10. Mär 2009 18:59

Re: TMemo.Lines.LoadFromFile()
 
Ich verstehe ehrlich gesagt nicht ganz, was denn nun Deine Frage ist :gruebel:

toms 10. Mär 2009 19:01

Re: TMemo.Lines.LoadFromFile()
 
Es gibt z.B eine Fehlermeldung der Klasse EFOpenError wenn das System den angegebenen Pfad nicht finden kann.

DeddyH 10. Mär 2009 19:02

Re: TMemo.Lines.LoadFromFile()
 
Jepp, bei mir auch.

asusbob 10. Mär 2009 19:05

Re: TMemo.Lines.LoadFromFile()
 
Hmmm, mein Delphi sagt mir nix... hab ich ggf falsche Einstellungen? (Benutze CodeGear RAD 2007)

DeddyH 10. Mär 2009 19:06

Re: TMemo.Lines.LoadFromFile()
 
Gibst Du denn einen nichtexistenten Pfad an?

asusbob 10. Mär 2009 19:07

Re: TMemo.Lines.LoadFromFile()
 
Jup, schon Probiert

DeddyH 10. Mär 2009 19:08

Re: TMemo.Lines.LoadFromFile()
 
Dann müsste es doch bei fehlender Fehlerbehandlung spätestens zur Laufzeit eine Exception geben.

asusbob 10. Mär 2009 19:11

Re: TMemo.Lines.LoadFromFile()
 
Na gut... das soll der Guten Abnehmerin reichen... sonst hab ich halt nen try...except-block zu viel drin, aber lieber einer mehr als zu wenig

DeddyH 10. Mär 2009 19:12

Re: TMemo.Lines.LoadFromFile()
 
Frag doch einfach vorher mit FileExists ab, ob die zu ladende Datei überhaupt existiert. Wenn das der Fall ist und sie sich nicht öffnen lässt, hast Du eh ein anderes Problem (Rechte z.B.).

Satty67 10. Mär 2009 19:14

Re: TMemo.Lines.LoadFromFile()
 
Jaja, die Lösung habt Ihr quasi schon gepostet...
Delphi-Quellcode:
if FileExists('Ich_lasse_mich_nicht_öffnen.txt') then begin
  try
    Memo1.Lines.LoadFromFile('Ich_lasse_mich_nicht_öffnen.txt');
  except
    on EFOpenError do ShowMessage('Datei konnte nicht geöffnet werden.');
  end;
end else ShowMessage('Datei existiert nicht.');
<Edit>
Während ich mich hier mit Code abbreche ist der Thread leider schon viel weiter... lasse meinen Code jetzt trotzdem mal stehen.

DeddyH 10. Mär 2009 19:21

Re: TMemo.Lines.LoadFromFile()
 
Genauso in der Art hatte ich das ja auch gemeint :zwinker:

asusbob 10. Mär 2009 19:39

Re: TMemo.Lines.LoadFromFile()
 
Jup, hab ich jetzt auch so implementiert, danke :)

Roefe68 23. Nov 2011 12:45

AW: TMemo.Lines.LoadFromFile()
 
Hallo zusammen

Habe das Problem dass mir das LoadFromFile nicht den ganzen Textinhalt ins Memo lädt.

Delphi-Quellcode:
memoname.Lines.LoadFromFile(Dateiname);
Das Problem tritt nur bei meinem Win7 64-Bit Rechner auf.
Interessanterweise kann ich die Datei mit
Delphi-Quellcode:
ShellExecute(Handle,'open',PChar(Dateiname),Nil, nil, SW_NORMAL);
problemlos komplett öffnen

Kennt jemand das Problem oder besser die Abhilfe

Danke für die Hilfe
Röfe

mkinzler 23. Nov 2011 13:16

AW: TMemo.Lines.LoadFromFile()
 
Was bedeutet: nicht den gesamten Inhalt?

Roefe68 23. Nov 2011 14:20

AW: TMemo.Lines.LoadFromFile()
 
Hi

Die Datei wird geladen, aber nur die ersten paar Zeilen werden geladen.
also aus

[DATEIINHALT]
111111111111111111
222222222222222222
333333333333333333
444444444444444444
111111111111111111
222222222222222222
333333333333333333
444444444444444444
111111111111111111
222222222222222222
333333333333333333
444444444444444444
111111111111111111
222222222222222222
333333333333333333
444444444444444444
[/DATEIINHALT]

wird



[MEMOINHALT]
111111111111111111
222222222222222222
333333333333333333
444444444444444444
111111111111111111


[/MEMOINHALT]

himitsu 23. Nov 2011 14:36

AW: TMemo.Lines.LoadFromFile()
 
Auch wenn z.B. die TStringList intern nicht mit PChar arbeitet, wird dennoch immer beim Auffinden einer #0 die Verarbeitung abgebrochen.
Sobald also dieses Zeichen ( #0 ) in der Datei drin ist, wird alles ab da ignoriert.

PS: AssignFile+Read/ReadLn bricht bei #1A (EOF) ab und nicht bei #0.
Dies ist aber für das TMemo egal, da die API dieser Windows-Komponente sowieso nur mit PChar arbeitet.

Roefe68 23. Nov 2011 14:52

AW: TMemo.Lines.LoadFromFile()
 
Zitat:

Zitat von himitsu (Beitrag 1137526)
Auch wenn z.B. die TStringList intern nicht mit PChar arbeitet, wird dennoch immer beim Auffinden einer #0 die Verarbeitung abgebrochen.
Sobald also dieses Zeichen ( #0 ) in der Datei drin ist, wird alles ab da ignoriert.

PS: AssignFile+Read/ReadLn bricht bei #1A (EOF) ab und nicht bei #0.
Dies ist aber für das TMemo egal, da die API dieser Windows-Komponente sowieso nur mit PChar arbeitet.

Werde ich mal versuchen.
Danke für die Info

Luckie 23. Nov 2011 14:57

AW: TMemo.Lines.LoadFromFile()
 
Was himitsu eigentlich sagen wollte ist, guck dir die Datei mal mit einem Hexeditor an, ob da das Stringendezeichen enthalten ist. Notepad interpretiert die Textdatei eventuell als Unicode-Datei, dann spielt mitten drin ein einzelnes Stringendezeichen keine Rolle.

p80286 23. Nov 2011 14:59

AW: TMemo.Lines.LoadFromFile()
 
benutz doch mal eine Tstringlist um die Datei zu lesen.
Wenn die Anzahl der Zeilen, die gleiche ist (in Datei und Stringlist ) hat TMemo ein Darstellungsproblem.

Die zu lesende Datei mal mit einem Hex-Editor zu öffnen ist natürlich auch kein Fehler

Gruß
K-H

Roefe68 24. Nov 2011 06:40

AW: TMemo.Lines.LoadFromFile()
 
Zitat:

Zitat von Roefe68 (Beitrag 1137531)
Zitat:

Zitat von himitsu (Beitrag 1137526)
Auch wenn z.B. die TStringList intern nicht mit PChar arbeitet, wird dennoch immer beim Auffinden einer #0 die Verarbeitung abgebrochen.
Sobald also dieses Zeichen ( #0 ) in der Datei drin ist, wird alles ab da ignoriert.

PS: AssignFile+Read/ReadLn bricht bei #1A (EOF) ab und nicht bei #0.
Dies ist aber für das TMemo egal, da die API dieser Windows-Komponente sowieso nur mit PChar arbeitet.

Werde ich mal versuchen.
Danke für die Info


AssignFile+Read/ReadLn hats gebracht. Danke für Eure Hilfe

bernhard_LA 24. Nov 2011 07:10

AW: TMemo.Lines.LoadFromFile()
 
falls unter x32 geschrieben und dann unter x64 gelesen ist der Fehler erklärbar

x64 -> 4 Byte / Char
x32 -> 2 Byte / Char


wir hatten die selbe Problematik beim Schreiben und Lesen von Streams auf die HD, im HEX Editor sind die x64 Zeichen schön zu sehen ....

mkinzler 24. Nov 2011 07:59

AW: TMemo.Lines.LoadFromFile()
 
Das hat nichts mit 32Bit/64Bit sondern mit Ansi/Unicode zu tun.

bernhard_LA 24. Nov 2011 08:18

AW: TMemo.Lines.LoadFromFile()
 
stimmt ist UNICODE THEMATIK und nicht x64 -

bei uns halt app7 in D7 schreiben und dann unter XE2 x64 lesen (Unicode) -- kommt nut der halbe Text an


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz