Komplette Datei auslesen klappt nicht (VC6.0)
-
oder so
CFile datei; datei.Open("c:\\datei.txt", CFile::modeRead,0); int laenge = datei.GetLength(); char* puffer = new char[laenge]; memset(puffer,0,sizeof(char)*laenge); datei.Read(puffer,laenge);Du könntest das auch in eine Schleife packen und in 100KB Schritten auslesen.
-
Danke euch für die Anregung & den Codebsp. Die Länge der Datei ist 27136, aber in puffer sind nur 8 Zeichen. Wahrscheinlich schafft die Funktion .read() nicht über die 8. Stell hinauszulesen und bricht dort ab. Das passiert auch bei der Verwendung von fstream und dessen Methode .get(), die ich vorher verwendet habe.
Ich habe echt keinen Durchblick, woran das liegt.
-
Da ich nicht weiss, wie ich diese Datei hochlade kann, setze ich einfach mal einen Teil des Inhalts von der Datei hierein, mit der kritischen Stelle. Vielleicht wird der Inhalt hier unverfälscht wiedergegeben und du kannst es nachempfinden:
"ÐÏࡱá > þÿ þÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ -
! # " $ & % ' * ( ) + . , 3 þÿÿÿ/"
-
LoesungsSuchender schrieb:
Die Länge der Datei ist 27136, aber in puffer sind nur 8 Zeichen.
Und das schließt du woraus? Du versuchst die Daten doch hoffentlich nicht als String auszugeben, oder?
-
Ich sehe im Debugmodus, dass puffer nur diese Zeichen enthält
"ÐÏࡱ"
mehr ist da nicht drin.
-
Wie oben gesagt, kopier den Beispieltext oben und speiche als Textdatei. Dann versuche es wieder rauszulesen. Wahrscheinlich werdet ihr nicht mehr als "ÐÏࡱ" haben, oder nicht?
-
Hat denn niemand eine Lösung zu so einem "banalen" Problem von mir

-
LoesungsSuchender schrieb:
Ich sehe im Debugmodus, dass puffer nur diese Zeichen enthält
Und du "siehst" das genau wie? Schaust du wirklich in den Speicher, oder lässt du dir nur die Variable puffer im Debugger anzeigen?
Der Debugger wird nämlich bei der Anzeige von char*-Variablen auch stoppen, sobald er ein Nullbyte findet. Daraus kannst du also nicht folgern, dass nicht alle Bytes gelesen wurden.
Du könntest dir allerdings mal den Rückgabewert des Read-Aufrufs ansehen, den du momentan so schön hinten rüberfallen lässt.
-
Irgendwie ist alles unlogisch! Der Texteditor kann doch auch alle Zeichen anzeigen. Wieso nicht der Debugger???? Und wieso nicht read() oder get()
Ich werde noch verrückt

-
Hat MFK doch schon gesagt. Wenn du dir nullterminierte Zeichenketten im Debugger anschaust, dann zeigt er dir auch nur die Zeichen bis zum ersten '\0' an. Es macht doch aus Sicht des Nutzers keinen sinn die 512 MByte Speicher, welche hinter der Zeichenkette liegen, auch mit anzuzeigen?
-
LoesungsSuchender schrieb:
Irgendwie ist alles unlogisch! Der Texteditor kann doch auch alle Zeichen anzeigen.
Nein, kann er nicht. Er kann nur die anzeigen, die als Text darstellbar sind. Daher der Name des Programms.
Der Editor, mit dem du die Datei geöffnet hast, überspringt vermutlich einfach alle Zeichen, die er nicht darstellen kann.
Oder sieht das, was du hier reinkopiert hast, für dich wirklich wie 27136 Zeichen aus?

-
MFK schrieb:
LoesungsSuchender schrieb:
Irgendwie ist alles unlogisch! Der Texteditor kann doch auch alle Zeichen anzeigen.
Nein, kann er nicht. Er kann nur die anzeigen, die als Text darstellbar sind. Daher der Name des Programms.
Der Editor, mit dem du die Datei geöffnet hast, überspringt vermutlich einfach alle Zeichen, die er nicht darstellen kann.
Oder sieht das, was du hier reinkopiert hast, für dich wirklich wie 27136 Zeichen aus?

Danke für eure Bemühungen, aber ihr lest nicht richtig
Ich habe doch geschrieben, dass das nur ein Teil von der Datei ist. Ich werde mich hüten 27136 Characters hierein zu platzieren 
Wenn man diesen winzig kleinen Teil in eine Textdatei kopiert u. abspeichert, dann kann man diesen Teil restlos wieder mit dem Programm Editor/Word laden und ansehen. Das ist fakt.
Nicht so, wenn man wie besprochen programmiert. Dann erhält man nur das hier:
"ÐÏࡱ"

-
Das Problem scheint nicht klein zu sein. Vielleicht bin ich auf einen Schatz von VC6.0 gestossen

http://www.spotlight.de/zforen/cpp/m/cpp-1187528684-31912.html
-
LoesungsSuchender schrieb:
Ich werde mich hüten 27136 Characters hierein zu platzieren
Du musst sie ja gar nicht hier reinposten. Kopier sie doch einfach mal in ein neues Textdokument und schau dir die Dateigröße an.
LoesungsSuchender schrieb:
Wenn man diesen winzig kleinen Teil in eine Textdatei kopiert u. abspeichert, dann kann man diesen Teil restlos wieder mit dem Programm Editor/Word laden und ansehen. Das ist fakt.
Das mag Fakt sein, hat aber genau gar nichts mit deinem "Problem" zu tun. Beim Bearbeiten im Texteditor gehen unter anderem auch die Nullbytes verloren, die dich beim Debugger in so tiefe Verwirrung stürzen.
LoesungsSuchender schrieb:
Nicht so, wenn man wie besprochen programmiert. Dann erhält man nur das hier:
Ja, wenn man sich das über eine char*-Variable im Debugger ansieht. Dass das so ist, und warum das so ist, wurde dir ja nun auch schon mehrfach, offenbar erfolglos, erklärt. Der Tipp, die Daten mal über das Memory-Fenster anzusehen, ist anscheinend auch nicht zu dir vorgedrungen.
LoesungsSuchender schrieb:
Das Problem scheint nicht klein zu sein. Vielleicht bin ich auf einen Schatz von VC6.0 gestossen

Das Problem liegt zwischen den Ohren. Vielleicht solltest du auch einfach mal tun, was man dir hier rät, dann wäre dein "Problem" schon längst gelöst

Es ist übrigens komplett sinnlos, Binärdaten mittels Texteditor und Webforum durch die Gegend zu kopieren.
Aber wenn du uns nicht glauben willst, versuchen wir es doch mal anders:
Was willst du denn letztendlich mit den Daten anstellen? Du liest die doch sicher nicht nur ein, um sie dir im Debugger anzusehen, oder?
-
Danke für deine Geduld mit mir
Der Grund, warum ich die Datei(en) einlesen möchte, ist ganz einfach.Es exitsieren bei mir auf dem Rechner Tausende solcher Dateien mit diesem komischen Format. Da die "Hieroglyphen" die Lesbarkeit der eigentlichen Informationen, die im tiefen Djungel der Dateien stecken, stören, muss ich nach einem Signalwort suchen lassen, ab wo dann die Informationen sich befinden, die mich interessieren, um sie zu selektieren.
Wenn ich aber in meinem Programm nicht nach dem Signal Wort abfragen kann, weil die vielen Zeichen scheinbar nicht eingelesen werden, dann sind mir die Handschellen angelegt.
Allerdings juckt es mich, dass der Inhalt dieser Dateien im Texteditor sichtbar sind; und ich nach dem Signal Wort (Strg + F) problemlos suchen kann, in meinem Programm aber nicht zu finden sind.
Ihr wollt mir helfen, aber irgendwie raffe ich es nicht, was ihr meint, und komme so nicht weiter.
-
[quote="LoesungsSuchender"][quote="MFK"]
LoesungsSuchender schrieb:
Irgendwie ist alles unlogisch! Der Texteditor kann doch auch alle Zeichen anzeigen.
Nein, kann er nicht. Er kann nur die anzeigen, die als Text darstellbar sind. Daher der Name des Programms....quote]
So noch einmal von vorne.
Dieser TEXT :
"ÐÏࡱá > þÿ þÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ -
! # " $ & % ' * ( ) + . , 3 þÿÿÿ/"Bitte einfach in eine Textdatei kopieren und abspeichern.
Dann den Text laden und was seht ihr? Natürlich denselben Text - keine Zauberei!So, nun schreibt ein Programm, das dieselbe Datei einlesen soll.
Peng! Geht nicht. Wer sagt, es geht, der postet seinen Code hier und ich sage danke!!!
-
ÐÏࡱá -> in hex -> D0 CF 11 E0 A1 B1 1A E1 -> Signatur !! .DOC, .DOT, .PPS, .PPT, .XLA, .XLS, .WIZKann das sein, dass Du die ganze Zeit probierst, ein MS-Office-Dokument als Textdatei (.TXT) zu öffnen und als solche zu lesen ?
-
LoesungsSuchender schrieb:
Bitte einfach in eine Textdatei kopieren und abspeichern.
Das ist sinnlos.
LoesungsSuchender schrieb:
Dann den Text laden und was seht ihr? Natürlich denselben Text - keine Zauberei!
Das hat nichts mit deinem Problem zu tun.
So, nun schreibt ein Programm, das dieselbe Datei einlesen soll.
Das Programm hast du schon. Die Daten sind da.
Du siehst dir nur die Daten auf eine Art und Weise an, die nicht alles zeigt, weil sie vorzeitig abbricht.Peng! Geht nicht.
Mir wird es jetzt zu blöd mit deiner Schnallbremse.
Wenn das, was ich dir hier immer und immer wieder sage, nicht in deinem Hirn ankommt, dann ist dir nicht zu helfen.
Glaub ruhig weiter, dass es an deinem Code liegt, oder dass du einen Bug in Visual C++ gefunden hast.
-
Lies doch mal den Inhalt der Datei aus und speichere ihn in einer 2. Datei. Dann
kannst du die ja vergleichen. Nach deiner Theorie dürfte die 2. Datei höchstens
einige Byte groß sein. Nach unserer Theorie sind beide Dateien identisch. Zum
Vergleichen kannst du dir ja ein passendes Tool runterladen... google hilft.
-
LoesungsSuchender schrieb:
Ich sehe im Debugmodus, dass puffer nur diese Zeichen enthält
"ÐÏࡱ"
mehr ist da nicht drin.
Dann mach mal in der Schnellüberwachung ein ",x" (ohne die Anführungszeichen) hinter den Variablennamen. Was siehst Du nun?