schreiben in datei



  • hi,

    ich möchte gerne den inhalt von datei2, an das datei ende von datei1 hängen,
    den inhalt von datei2 habe ich schon ausgelesen, ich weiss aber nicht wie ich ihn in die datei1 schreiben soll??
    hier mein code:

    if (urfile.good())
    	{	// zeiger an ende des urfiles setzten
    		urfile.seekg(0L,ios::end);
    		urfile.tellg();
    		// wenn file exsistiert
    			if(file.good())
    		{// zeilenweise lesen von file
    			while(!file.eof())
    			{ 
    				file.getline(puf,5000);
    				setw(0); 						
                    name= puf;
    				MessageBox(name,"file");
    			}
    		}urfile.close();
    			file.close();
    

    Die MessageBox steht nur zum vergleich drin, das ich sehe ob auch wirklich das richtige eingelesen wurde, sie verschwindet dann aber wieder.
    eigentlich müsste ich doch nur den inhalt von puf schreiben, aber wie ist der passente befehl dazu???
    habt ihr einen tip für mich???
    danke



  • hi

    offne die Datei mit

    fstream File( "Dateiname", ios::app);
    

    Daruch werden die sagen die du in den Stream schreibst an das Dateiende angehägt.

    oder schau mal auf der HP vorbei da müsste es was geben.
    http://www.tfh-berlin.de/~kempfer/skript_cpp/Kap10.html

    Gruß
    de_Bert



  • Hi!

    Wenn Du die Datei binär kopieren möchtest (nehme ich mal an sonst würdest Du
    die Zeilenumbrüche in der Datei killen) kannst Du folgendes tun:

    #include <fstream>
    #include <string>
    #include <iterator>
    using namespace std;
    
    int main(int argc, char * argv[])
    {
    	ifstream quelle("t:\\test2.txt",ios::in|ios::binary);
    	if(!quelle)
    		return 20;
    
    	istreambuf_iterator<char> beg(quelle);
    	istreambuf_iterator<char> end;	
    
    	ofstream ziel("t:\\test.txt",ios::out|ios::binary|ios::app);
    	if(!ziel)
    		return 20;
    
    	ostreambuf_iterator<char> target(ziel);
    	copy(beg,end,target);
    
    	return 0;
    }
    

    Wenn Du wirklich textbasiert Arbeiten musst würde ich Dir empfehlen getline zu verwenden:

    std::string temp;
    getline(quelle,temp);
    

    Du kannst dann mit dem op<< den String in die Datei schreiben. (oder mit iteratoren oder....)

    Wichtig dabei ist, wie bereits gesagt, die Datei mit ios::out|ios::app zu öffnen.



  • Danke für die antworten

    ich werde mal probieren wie es klappt.

    ja ich möchte textbasiert arbeiten , da in den textfiles nur text steht den ich verbinden möchte.

    ich arbeite in vc++, das funktioniert aber auch, oder??
    die aktion wird durchgeführt nach dem klick auf einen button.



  • hi,
    ich hab jetz einwenig rum probiert aber irgendwie klappt das nicht so ganz.
    könnt ihr mir nicht nochmal helfen, bitte

    CString name;
    		fstream urfile(lesepfad,ios::app);
    		ifstream file(file_zz,ios::in);
    
    	char puf[1000];
    		if(file.good())
    		{
    			urfile.seekg(0L,ios::end);
    		           MessageBox("file");
    						while(!urfile.eof())
    			{ 
    				urfile.getline(puf,1000);
    				setw(0); 				name= puf;
    				MessageBox(name,"file");
    			}
    		urfile.close();
    			file.close();
    

    ich bin einfach nicht heute nicht ganz bei mir, bei so doofen wetter auch kein wunder...
    kann man den code nicht einfach an zwei drei kleine stellen ändern???



  • #include <fstream>
    #include <string>
    #include <iterator>
    using namespace std;
    
    int main(int argc, char * argv[])
    {
    	std::string lesepfad ( "t:\\test.txt");
    	std::string file_zz ("t:\\test2.txt"); 
    
    	ofstream urfile(lesepfad.c_str(),ios::out|ios::app); 
             if(!urfile)
                return 20;
    
    	ifstream file(file_zz.c_str(),ios::in); 
             if(!file)
                return 20;
    
    	std::string temp;
    	while(getline(file,temp))
    		urfile<<temp;
    
    	return 0;
    }
    

    Kopiert

    ab
    c
    de
    f
    gh

    als

    abcdefgh

    in urfile



  • danke aber :

    ich arbeit ein vc++ und die aktion wird nach dem drücken eines buttons ausgeführt. Die Aktion steht in der "Funktion des Buttons", und ist vom typ void, da kann ich nicht ne neue funktion in der funktion erstellen, da ich die werte dann auch später wieder brauche.
    Naja und dann müssten die zeilen immer ncoh getrennt sein, also so wie es eingelesen wurde soll es auch wieder aus gegeben werden.
    sprich
    ab
    c
    de
    f
    gh

    usw.



  • Du weisst nicht was du willst.

    Wenn Du es im Textmodus öffnest wirst Du keine \n bekommen. Die musst Du dann selbst einfügen. Es sollte einfach sein:

    urfile<<temp<<'\n';
    

    Wenn es "genauso wie es ist" eingefügt werden soll kannst Du die Variante nehmen die binär arbeitet. (Siehe Beitrag 3)

    Die Fantasie nun diesen Quelltext in Deine Routine einzubringen wird Dir niemand geben. Das musst Du nun alleine schaffen.

    Wenn nicht, schau Dich mal im Tutorial eck um oder such mal mit der suche nach diesem Wort. Dort kannst Du Dich über Funktionen informieren.

    Nicht zu vergessen die FAQ:

    http://c-plusplus.net/forum/viewtopic.php?t=39469



  • kleine frage am rande, ich habe es vorher so gemacht:

    if (in_file.Open(lesepfad, CFile::modeReadWrite)) 
    		{
    			// öffnen der Vorlage und unter "urfile" schreiben
    			if (in_files.Open(file_zz, CFile::modeRead))
    			{
    
    				DWORD laenge = in_files.GetLength();
    				in_files.Read( buf, laenge );
    				DWORD dwActual = in_file.SeekToEnd();
    				in_file.Write(buf,laenge-1);
    			    in_files.Close();
       			}
    			in_file.Close();
    		}
    

    aber da wurden für jeden zeilen umbruch ein zeichen an das ende der datei geschrieben und um das jetzt eg zu bekommen wollte ich es halt mal so probieren...
    kann man das vielleicht hier irgendwie weg machen das er diese zeichen drunter schreibt, oder geht das nur mir f/o-stream



  • Naja und dann müssten die zeilen immer ncoh getrennt sein, also so wie es eingelesen wurde soll es auch wieder aus gegeben werden.
    sprich
    ab
    c
    de
    f
    gh

    aber da wurden für jeden zeilen umbruch ein zeichen an das ende der datei geschrieben und um das jetzt eg zu bekommen wollte ich es halt mal so probieren...
    kann man das vielleicht hier irgendwie weg machen das er diese zeichen drunter schreibt, oder geht das nur mir f/o-stream

    Was denn nun ? 😕 😕 😕

    vllt. verstehen wir uns besser wenn Du einfach mal ein Beispiel machst was in Datei1 und Datei2 steht und was als Ergebnis rauskommen soll.



  • das sind zwei verschieden teile zum einlesen, das was in der datei steht darf ich leider nicht posten ab es sieht etwa so aus:

    #irgendwas
    
    .hallo
    
    a=19;
    d=26;
    
    .end
    

    das File ist in echt länger.
    das prog läuft etwa so ab:
    1. ich schreibe etwas in ein leeres text file
    2. unter das Textfile schreibe ich den inhalt eines anderen Files (beispiel)
    3. ich erstelle wieder ein neues leeres File, mit anderm namen (logisch)
    4. ich schreibe etwas in dieses File
    5. ich setzte den inhalt des ersten Files unter das eben neu erstellten File.

    und wenn ich das jetzt mit dem code den ich als letztes postete mache, schreibt er mir hinter das ende des Files ein Zeichen ( \áüofsa sd..), für jeden zeilenumbruch je ein zeichen (hab nach gezählt).

    Jetzt versuche ich den inhalt der Textfiles so unter die Textfiles zu schreiben ohne das für den zeilenumbruch ein Zeichen geschrieben wird.

    Verstehst du wie ich meine???



  • Ein Zeilenumbruch ist auch immer ein (bei WIndows 2) Zeichen.
    Da kommst Du nicht umher.

    Mach mal folgendes:

    Nimm mal die beispiele von mir (die mit main) und probier sie einfach mal aus.

    Vllt. hilft Dir ja das Beispiel aus Beitrag 3 weiter.

    Probier es einfach mal 🤡


Log in to reply