ofstream erstellt keine neue Datei



  • Wo soll ich denn suchen?
    Im Installationsordner von Borland? Da finde ich auch nichts.



  • Hallo

    Ich habe jetzt eigenhändig deinen Quellcode im Builder 5 getestet, sowohl in einem Konsolenprogramm als auch in einem VCL-Projekt. Die Datei wird korrekt erzeugt. Du machst etwas anderes falsch, was nichts mit dem Quellcode zu tun hat.

    bis bald
    akari



  • Phisherman schrieb:

    Wo soll ich denn suchen?

    Im Projektordner bzw. den Release- oder Debug-Unterordnern.
    Besser noch: du verwendest im Code explizite Pfadangaben:

    f.open("c:\\test.dat", std::ios::out);
    


  • 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.


Anmelden zum Antworten