Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » *txt file in einen String laden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.02.2007, 11:16 Uhr
MagicMerlin



Hi!
Hab da ein kleines Problem, bei dem ich nicht wirklich weiter komme ...
Ich hab ein Textfile (*.txt), welches ich in einen String laden will. Ich bin den folgenden Weg gegangen:


C++:
    char NewFile[1000];
    CString NewProd;    
    CFile theFile;
    theFile.Open("C:\\Temp.txt", CFile::modeNoTruncate |CFile::modeRead);
    
    theFile.Read(NewFile, 999);
    NewProd=NewFile;



Wenn ich meinen Code kompliliere, meckert er nicht! erst wenn ich meinem Programm diese entsprechende Stelle aufrufe, kommt die Fehlermeldung "DEBUG ASSERTION FAILED". Gibt es denn eine andere Möglichkeit den String mit dem Textfile zu "beladen"? Muss man den Umweg über einen CHAR gehen? Oder hab ich im Code nen Fehler?
Danke für Eure Hilfe!

Merlin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.02.2007, 12:26 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Du nutzt zwar hier die MFC aber evtl. kannst du mit meinem Code ja doch etwas anfangen:

C++:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

int main(int argc, char* argv[])
{
    std::ifstream stream("foo.txt");
    std::string content, tmp;
    std::stringstream ss;
    while(std::getline(stream, tmp))
    {
        ss << tmp << std::endl;
    }
    content = ss.str();
    std::cout << content << std::endl;
    std::cin.get();
    return EXIT_SUCCESS;
}

In content steht der Inhalt der Datei
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.02.2007, 12:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@J-jayz-Z
Warum der umweg über einen stringstream... kannst du doch gleich in einen std::string ballern
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.02.2007, 12:52 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Jo, aber ich arbeite lieber mit streams bei sowas ... klar kann man auch
C++:
content += tmp;
schreiben oder mit Hilfe von seekg, tellg und read alles in einem Wisch einlesen, aber so finde ich das irgendwie sauberer - frag mich nicht, wieso
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

Dieser Post wurde am 26.02.2007 um 12:53 Uhr von J-jayz-Z editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.02.2007, 15:47 Uhr
Blubber2063



Naja, sofern man dem string nicht vorher passend gross gemacht hat, dürfte das concatenieren über einen Puffer schon effizienter sein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.02.2007, 17:42 Uhr
CppProgrammer




C++:
bool ReadFile(LPCTSTR strFile, CString &strText, UINT nOpenFlags=CFile::modeRead)
{    
    CFile File;
    if(File.Open(strFile, nOpenFlags)){
        unsigned int len = (unsigned int)File.GetLength();
        TCHAR *tcData = new TCHAR[len+1];
        tcData[len] = '\0';
        File.Read(tcData, len);
        strText = tcData;
        delete [] tcData;
        File.Close();
        return true;
    }
    return false;
}


Dieser Post wurde am 26.02.2007 um 17:46 Uhr von CppProgrammer editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.02.2007, 15:03 Uhr
MagicMerlin



Hi!
Danke euch für die Antworten! Hab es hinbekommen. Hab es so gemacht wie es CppProgrammierer vorgeschlagen und es klappt prima!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.02.2007, 15:20 Uhr
mmc20
puss in boots


hi, wenn du die mfc benutzt, und eh mit "CString"s arbeitest, kannstes auch so machen:

C++:
CString tmp, name="C:\\deine.txt";
CFile file;
if ( file.Open(name, CFile::modeRead) ) {
    int nFileLength = file.GetLength();
    int nBytesRead = file.Read( tmp.GetBufferSetLength(nFileLength), nFileLength);
    tmp.ReleaseBuffer();
    if ( nFileLength != nBytesRead ) {
        // es wurde nicht alles gelesen
    }
}
file.Close();

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: