ofstream erstellt keine neue Datei
-
Hallo,
Das std::ios::out kann man hier auch weglassen da ja eh ofstream verwendet wird.
-
Hier mal der wichtigste Teil des Codes (gekürzt):
//std::ofstream datawrite wurde als privte Eigenschaft von TfrmMain deklariert //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfrmMain *frmMain; //--------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { if(!OpenDialog->Execute()) //Öffnen-Dialog wird gestartet { datawrite.open("generated.html",std::ios::in); //falls auf "Abbrechen" geklickt wird, wird eine Datei namens "generated.html" erstellt und eine Verbindung zwischen dem Datei-Objekt und dem Ausgabestrom "datawrite" hergestellt, andernfalls wird die vom Benutzer ausgewählte Datei zum Streamen geöffnet } else datawrite.open(OpenDialog->FileName.c_str(),std::ios::in); datawrite<<"Blabla Blaa? Blaa!!!"; //Text wird in Datei gestreamt datawrite.close(); //Verbindung zwischen Stream und Datei-Objekt wird getrennt } //---------------------------------------------------------------------------
-
Wozu ist das std::ios::in bei dir gut?
-
Ich habe gelesen, dass du mich darauf hingewiesen hast, es weglassen zu können. Aber dann beschwert sich Borland.

-
Wenn du in die Datei schreiben willst, musst du dann nicht std::ios::out angeben?

-
Phisherman schrieb:
Aber dann beschwert sich Borland.

Und weil du die Fehlermeldung nicht verstehst, verrätst du sie uns auch nicht?
-
Ohne Angabe eines Pfades landet eine Ausgabedatei im Ordner, wo das Programm (exe) abgelegt worden ist und das ist durchaus sinnvoll. Hat mit Borland wenig zu tun, weil Standard. Also bringe in der IDE deine exe dorthin, wo du dann auch die Ausgabedatei haben willst.
-
Mhm, jetzt gibts keine Meldung mehr, wenn ich den Datenmodus (std::ios::in) weglasse.
@berniebutt: Das ist mir bewusst und genau deshalb habe ich diesen Thread ins Leben gerufen. Hier ist jetzt die aktualisierte Frage:
Wieso wird eine neue Datei erstellt, wenn ich std::ios::in weglasse?
Wenn ich es explizit angebe, macht er nichts. Wenn jedoch eine Datei ausgewählt wurde, also dort reingestreamt wird, klappt's problemlos.Also nochmal:
Funktioniert nicht
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { datawrite.open("test.dattel",std::ios::in); datawrite<<"Ab in die Datei!"; datawrite.close(); }Funktioniert
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { datawrite.open("test.dattel"); datawrite<<"Ab in die Datei!"; datawrite.close(); }
-
Weil ios::in nur Lesezugriff ermöglicht.
-
OK, das is natürlich nen peinlicher Fehler.

Aber wieso kann ich dann trotzdem eine bereits bestehende Datei mit ios::in bearbeiten?Danke für eure Hilfe.
-
Du kannst sie öffnen und daraus lesen, allerdings nicht schreiben. Wär´ ja blöd, wenn man Dateien nicht zum Lesen öffnen könnte.