Eine Kopie der Eingelesenen Datei mit einer anderen Endung erstellen...
-
Hallo alle zusammen,
Bin noch gerade neu mit c++,hoffe ihr könnt mir da weiterhelfen!
Ich habe ein kleines Programm geschrieben zum Einlesen von Dateien und vergleichen... Nun möchte ich eine Kopie (mit dem selben Inhalt) der Datei erstellen... Die Formatierung ändere ich dann manuell!
Der Pfad von directory 1 und 2 wird vorher selektiert auf der GUI... Nun soll es von der ersten selektierten Datei (directory1) eine Kopie erstellen, die dann bla.lst heisst.
void File::Compare_Files() { try { // Dateien einlesen std::vector<Signal> asc = loadSignalFile( directory1.ascii() ); std::vector<Signal> lst = loadSignalFile( directory2.ascii() ); ....Nun habe ich mein ersten beitrag bei euch, vielen dank nochmals für euren support

-
Willkommen im Forum.
Hmm Lösungsansatz zum selbst machen:
1.) Existierende Datei öffnen zum lesen. Hint: std::ifstream
2.) Neue Datei öffnen zum schreiben. Hint: std::ofstream
3.) Aus der ersten Datei lesen Hint: std::getline als bsp oder ifstream::read
4.) Formatierung ändern
5.) In die neue datei schreiben Hint: ofstream::writeSo wäre das kurz und knapp das Vorgehen.
rya.
-
ich habe es jetzt mal so versucht
... std::ifstream(directory1); std::ofstream asd( "kopie.lst" ); asd<<directory1; ...der zeigt mir keine Fehlermeldung nur die directory1 file (welches halt auf den Inhalt kopiert werden soll) hat nur diese Adresse drinne stehen...
geht das überhaupt mit asd<<directory1 ? Das war nur ein experiment...
... Mit ifsteam::read and write habe eich es halt nicht so richtig hinbekommen,der findet das nicht!
-
präziser formuliert nun wie kann ich den inhalt einer Datei in einer andere Datei kopieren...
Im späteren verlauf muss ich statt einen leerzeichen 7 weitere leerzeichen zwischenfügen... Aber das ist eine andere Geschichte

-
Nein, das geht so nicht, du musst das erst einlesen.
Bsp:std::ifstream rd("datei1"); std::ofstream wr( "kopie.lst" ); while ( !rd.eof() ) { std::string line; std::getline(line, rd); wr << line; } wr.close(); rd.close();So wäre das als bsp. Zeilenweise.
Es geht auch zeichenweise mit read() oder write():std::ifstream rd("datei1"); std::ofstream wr( "kopie.lst" ); while ( !rd.eof() ) { char buffer[1024]; rd.read(buffer, 1024); wr.write(buffer, 1024); } wr.close(); rd.close();rya.
-
Vielen Dank nochmal für den Code, jetzt verstehe ich es zwar aber der Compiler liefert mir Fehlermeldungen...Mit den ich nichts anfangen kann!
1>------ Build started: Project: Tool, Configuration: Debug Win32 ------
1>Compiling...
1>tool.cpp
1>.\tool.cpp(248) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::string'
1> D:\Program Files\Microsoft Visual Studio 8\VC\include\string(528) : see declaration of 'std::getline'
1>.\tool.cpp(248) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::string'
1> D:\Program Files\Microsoft Visual Studio 8\VC\include\string(528) : see declaration of 'std::getline'
1>.\tool.cpp(248) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::string'
1> D:\Program Files\Microsoft Visual Studio 8\VC\include\string(528) : see declaration of 'std::getline'
1>.\tool.cpp(248) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce templateargument for 'std::basic_istream<_Elem,_Traits> &' from 'std::string'
1> D:\Program Files\Microsoft Visual Studio 8\VC\include\string(528) : see declaration of 'std::getline'
1>.\tool.cpp(248) : error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : expects 3 arguments - 2 provided
1> D:\Program Files\Microsoft Visual Studio 8\VC\include\string(476) : see declaration of 'std::getline'
-
Dreh die Parameter von getline, die hab ich vertauscht aus Versehen :).
Erst den Stream, dann den String.
also std::getline( rd, line );
rya.
-
hehe ok... Das habe ich jetzt geändert kriege keien Fehlermeldungen mehr, aber das Programm stürzt ab... Kann die Files in der GUI einlesen sobald ich auf ok klicke fliegt mir das Programm um die Ohren bzw. kriege keien Rückmeldung mehr...
kann es sein das da noch Fehler drin enthalten sind ?
std::ifstream read("directory1"); std::ofstream write( "kopie.lst" ); while ( !read.eof() ) { std::string line; std::getline(read, line); write << line; } write.close(); read.close();
-
Ok, wenn ich die Datei explizit eingebe dann Funktioniert es, aber wieso akzeptier es nicht die selektierte Datei ? bzw. directory 1!!!???
Aber ansonsten funktioniert es Prima nur ich habe noch ein kleines Problem
Wenn ihr schonmal so nett sei 
Die Formatierung stimmt nicht so ganz, es macht keine Zeilenbrüche rein, und versuct alles in eine Zeile reinzuschreiben... Mir wäre Zeilen umbrüche halt viel lieber...
-
Dateien die an ifstream übergeben werden, müssen existieren und man muss entweder den relativen (zum Ausführungsort der .exe) oder den absoluten pfad angeben.
Für Zeilenumbrüche:write << line << std::endl;edit: Syntaktisch ist das so ok.
rya.
-
Ok, das mit der Datei muss ich dann noch dann demenstprechend anpassen...
Mit den Zeilenumbrüchen klappt auch Prima... Danke!
Ich habe mal versucht, das es zu einem bestimmten keyword (der einmalig ist) springt und ab da anfängt zu kopieren...
Wieso funkgt das nicht

std::ifstream read(directory1); std::ofstream write( "kopie.lst" ); while ( !read.eof() ) { std::string line; while (std::getline( read, line ) && line!="Keyword" ); std::string line; std::getline(read, line); write << line<<std::endl; } write.close(); read.close();
-
ok habe das auch hinbekommen dankeschön
