in datei schreiben
-
Hallo,
ich hab folgendes Problem
ich habe ein file_name welches weiter oben definiert wird und zwar so:CString file_name = file_dlg.GetPathName();
jetzt geht es weiter unter in der funktion darum das eine bestehende datei geöffnet werden soll und der inhalt einer anderen datei unter den inhalt der ersten datei gehängt wird, ich habe das jetzt so gemacht:
int i=1; char zeile[1000]; //speichern verschiedene Dateizeigerpositionen bei der Ausgabe streampos ausgabepos,anfangspos,endpos; ifstream eingabe(file_name,ios_base::in); if(eingabe.good()) { ofstream ausgabe(file_name, ios_base::out|ios_base::in | ios_base::ate); if(ausgabe.good()) { eingabe.seekg(0L,ios::end); // ausgabe = eingabe.tellg(); ausgabepos= ausgabe.tellp(); // ausgabe.eof (" "); for(int j=0;j<80;j++) eingabe.seekg(0L,ios::beg); while(eingabe.good()) { eingabe.getline(zeile,250); // ausgabe(setw(2) ,i++,":" ,zeile ,endl); if(ausgabe.fail()) { MessageBox("Ausgabedateifehler : Schreiben"); break; } } endpos=ausgabe.tellp(); ausgabe.seekp(ausgabepos,ios::beg); /* int g= endpos-anfangspos; MessageBox("alt-neu", g "Bytes");*/ } else MessageBox("Ausgabefehler"); } else MessageBox("eingabefehler oder datei nicht gefunden");
so beim kompilieren zeigt er mir keine fehler an, nur wenn dann mit diesen anweisungen begonnen werden soll hängt er sich auf und gibt die MessageBox "eingabefehler oder datei nicht gefunden" aus. dieses file_dlg zeigt auf den Platz an dem die erste datei steht.
Kann mir jemand sagen wie ich das zum laufen bekomme???
-
was steht in file_name?
ist diese variable mit dem korrekten filename (vielleicht sogar inclusive Pfad) gefüllt?
-
in file_name steht das was in file_dlg steht.
ich gebe kurz vor ende der anweisung eine Messagebox aud in der der inhalt von file_name steht, und der inhalt ist der pfad, in dem die erste datei abgespeichert wurde.CFileDialog file_dlg (false,0, ("*.sml"),OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST , ("Files(*.sml) | *.sml | All Files (*.*) | *.* ||"), this);
(speichern unter)
MessageBox(file_name,"Speicherplatz");
(MessageBox)
CString file_name = file_dlg.GetPathName();
-
musst du vielleicht "OFN_NOCHANGEDIR" Flag setzten weil du sonst im falschen Directory bist
siehehttp://www.c-plusplus.net/forum/viewtopic.php?t=49603&highlight=ofnnochangedir
-
geht auch nicht ....
-
jetzt hab ich das so gemacht:
if (file_name, CFile::modeReadWrite) // if(eingabe.good()) { MessageBox("2"); ofstream ausgabe(file_name, ios_base::out|ios_base::in | ios_base::ate); if (file, CFile::modeReadWrite) // if(ausgabe.good()) { MessageBox("3"); eingabe.seekg(0L,ios::end); . . . ..
Die MessageBoxen stehen nur drin um zu sehen wann er an welcher stelle ist und im notfall zu sehen bis wohni er geht.
Naja jetzt hab ich das zwar so gemacht, aber er schreibt nix in die datei aber er läuft einwandfrei durch die anweisungen...
-
nach dem ich mit dem anderen nicht zurecht gekommen bin dachte ich ich probier es so:
ofstream in_file1(file_name); in_file1 << "hallo"; // in_file1.open(file_name); // öffnen der kopie zum lesen ifstream in_file2; in_file2.open(file_zz); // einlese puffer char p[1000]; //lies solang der input, aus der kopie da ist (reicht) while(!in_file2.eof()) { // einlesen in puffer in_file2>>p; //ausgeben in datei in_file1<< p ; } in_file1.close(); in_file2.close();
das geht aber auch nicht.
Also wenn ich das richtig verstanden hab öffne ich hier zwei verschiedene file´s , erstelle einen puffer und gebe dann solange das ende von file2 nicht erreicht wurde den inhalt in file1 aus oder??
Warum macht der das dann aber nicht.
Habt ihr bitte bitte eine antwort???
-
weiss keienr mehr weiter???
es ist doch c++, und es sollte doch auch so gehen oder...
oder liegt es daran das ich es in vc++ probiere??ofstream in_file1(file_name); in_file1.open(file_name); // öffnet datei zum lesen file_zz= kopie ifstream in_file2("kopien\\file2x2.sml"); in_file2.open("kopien\\file2x2.sml"); // einlese puffer char p[1000]; //lies solang den input aus der kopie wie da ist while(in_file2.eof()) { // einlesen in puffer in_file2>>p; //ausgeben in datei in_file1<< p ; } in_file1.close(); in_file2.close();
-
hat den von euchnoch nie jemand zwei files geöffnet und den inhalt des einen in das andere geschrieben??
-
Ich schau mir das mal an und füge meinen Lösungsvorschlag heute Abend noch an falls ich was machen kann.. Nur dass du schon mal weisst, dass sich jemand drum kümmert
-
So, war leider den Tag über unterwegs. Muss mich entschudigen. Konnte daher leider keine Lösung ausprogrammieren.
Aber schau mal auf folgendes Script.
Links auf Ein/Ausgabe klicken. Das dürfte genau das sein was Du suchst
-
Hallo,
danke das du dich darum gekümmert hast.
Leider kann ich mir den link nicht anschauen, frag mich nicht warum, ich weiss nicht warum, er sagt immer nur fehler bei der i....
ist auch egal, hier gehtr eh nie was richtig
danke erstmal
was mach ich den wen mein liebes programm spinnt.
es einen fehler anzeigt den es nciht gibt.
Ich habe eine Variable mit der ich ein anderes fenster öffne. von jetzt auf gleich hat die angefangen zu spinnen und gibt nur fehler aus wie: fehlendes ;, fehlende Klasse oder typbezeichnung,... ich bereinigt, sie gelöscht, neu erstellt, geschlossen neu geöffnet, alles bringt nix immer dieser eine fehler.
Naja da ist wahrscheinlich eher was für das vc++ forum....
-
Hallo,
mittlerweile klappt es in ein file den inhalt hintendaran zufügen und weiter zu speichern. Leider gibt er den inhalt des files in einer reihe aus...
könnt ihr mal hier über den code schauen und sagen wie ich den inhalt zeilen weise einlesse??
Wäre echt lieb...CStdioFile in_file; CStdioFile in_files; if (in_file.Open(file_name, CFile::modeReadWrite)) { if (in_files.Open(file_zz, CFile::modeRead)) { char buf[100]; in_files.ReadString( buf, 99 ); DWORD dwActual = in_file.SeekToEnd(); in_file.WriteString(buf); } }
-
Da du am Ende eines Files keinen Delimiter anfüngst, kannst du auch nicht verlangen das ein Trenner im File vorhanden ist.
-
einen was??
-
Delimiter = Trennzeichen, Endekennzeichnung. z,b, ist bei Strings cr lf (carriage return line feed) ein Typischer Delimiter. In C ist die schließende Null am Stringende ein Trennzeichen.
Und da du dein Infile liest und gleich rausschreibst, kommt das nächste Infile unmittelbar nach dem vorigen ohne das man später feststellen kann was aus welchem file war, deshalb sollte man zwei so Stücke (auch als Record variabler Länge bezeichnet) durch Kennung (Trennzeichen Delimiter) kenntlich machen.