Also Verzeichnis wird erzeugt und in Verzeichnis wir dgespeichert



  • Also ich habe ein problem, in meinem Programm werden verzeichnisse erstellt und dann imm zuletzt erstellten Verezichnis ne datei gespeichert, das Problem ist also er tellt fest ob an die FUnktio Speichern 1-2 oder 3 4 oder 5 Ordner angaben übergeben wurde, je nachdem werden dann auch verzeishcnisse erstellt, und das funkt auch, aber jetzt stell ich fest wieviele verzechnisse erstellt wurde und dsarin wird dann auch gespeichert, aber speichern tut er nicht, da sagt er irggendws mit unbehandelter ausnahmefehler doer so, hier mal der code

    die Funktion wurde so aufgerufen:

    DateiSpeichern("hall1", "hall2", "all3", "hallo4", "hallo5", "name.cfg");
    

    und die FUnktion sieht so aus:

    void CAcs::DateiSpeichern(CString Ordner1, CString Ordner2, CString Ordner3, CString Ordner4, CString Ordner5, CString Name)
    {
    
    //Verzeichnis Zufall erstellen////////
    CreateDirectory(m_strPfad + "\\" + m_strZufallszahl + "OGS", NULL);
    
    //Ordner erstellen////////
    if(Ordner1!="") {
    CreateDirectory(m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1, NULL);
    Ordner=1;
    }
    
    if(Ordner2!="") {
    CreateDirectory(m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2, NULL);
    Ordner=2;
    }
    
    if(Ordner3!="") {
    CreateDirectory(m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3, NULL);
    Ordner=3;
    }
    
    if(Ordner4!="") {
    CreateDirectory(m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Ordner4, NULL);
    Ordner=4;
    }
    
    if(Ordner5!="") {
    CreateDirectory(m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Ordner4 + "\\" + Ordner5, NULL);
    Ordner=5;
    }
    //////////////
    //Ermitteln welcher Ordner der letzte war///////
    // Bei mir kommt Beim Datei Speichern also der COde unten  immer Fehler bei der exe aber nicht beim Compiler test mal nen bissl rum
    // Für Ordner0
    if(Ordner==0)
    {
        CFile dateiLesen( strPath + "\\" + Name, CFile::modeRead );
    
        //Datei einlesen
        dateiLesen.Read( str, sizeof( str ) ); 
        dateiLesen.Close(); 
        m_strText = str; 
    
        int m = m_strText.Replace("12345", m_strZufallszahl);
        int s = m_strText.Replace('Ì', ' ');
    
        //Datei Speichern!
        UpdateData( TRUE ); 
        _tcscpy( strSchreiben, m_strText );
        CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Name, CFile::modeCreate | CFile::modeWrite ); 
        dateiSchreiben.Write( strSchreiben, sizeof( strSchreiben ) ); 
        dateiSchreiben.Close();
    }
    // Für Ordner1
    if(Ordner==1)
    {
        CFile dateiLesen( strPath + "\\" + Ordner1 + "\\" + Name, CFile::modeRead );
    
        //Datei einlesen
        dateiLesen.Read( str, sizeof( str ) ); 
        dateiLesen.Close(); 
        m_strText = str; 
    
        int m = m_strText.Replace("12345", m_strZufallszahl);
        int s = m_strText.Replace('Ì', ' ');
    
        //Datei Speichern!
        UpdateData( TRUE ); 
        _tcscpy( strSchreiben, m_strText );
        CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Name, CFile::modeCreate | CFile::modeWrite ); 
        dateiSchreiben.Write( strSchreiben, sizeof( strSchreiben ) ); 
        dateiSchreiben.Close(); 
    }
    //Für Ordner2
    if(Ordner==2)
    {
        CFile dateiLesen( strPath + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Name, CFile::modeRead );
    
        //Datei einlesen
        dateiLesen.Read( str, sizeof( str ) ); 
        dateiLesen.Close(); 
        m_strText = str; 
    
        int m = m_strText.Replace("12345", m_strZufallszahl);
        int s = m_strText.Replace('Ì', ' ');
    
        //Datei Speichern!
        UpdateData( TRUE ); 
        _tcscpy( strSchreiben, m_strText );
        CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Name, CFile::modeCreate | CFile::modeWrite ); 
        dateiSchreiben.Write( strSchreiben, sizeof( strSchreiben ) ); 
        dateiSchreiben.Close(); 
    }
    //Für Ordner3
    if(Ordner==3)
    {
        CFile dateiLesen( strPath + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Name, CFile::modeRead );
    
        //Datei einlesen
        dateiLesen.Read( str, sizeof( str ) ); 
        dateiLesen.Close(); 
        m_strText = str; 
    
        int m = m_strText.Replace("12345", m_strZufallszahl);
        int s = m_strText.Replace('Ì', ' ');
    
        //Datei Speichern!
        UpdateData( TRUE ); 
        _tcscpy( strSchreiben, m_strText );
        CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Name, CFile::modeCreate | CFile::modeWrite ); 
        dateiSchreiben.Write( strSchreiben, sizeof( strSchreiben ) ); 
        dateiSchreiben.Close(); 
    }
    //für Ordner4
    if(Ordner==4)
    {
        CFile dateiLesen( strPath + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + "\\" + Ordner4 + "\\" + Name, CFile::modeRead );
    
        //Datei einlesen
        dateiLesen.Read( str, sizeof( str ) ); 
        dateiLesen.Close(); 
        m_strText = str; 
    
        int m = m_strText.Replace("12345", m_strZufallszahl);
        int s = m_strText.Replace('Ì', ' ');
    
        //Datei Speichern!
        UpdateData( TRUE ); 
        _tcscpy( strSchreiben, m_strText );
        CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + "\\" + Ordner4 + "\\" + Name, CFile::modeCreate | CFile::modeWrite ); 
        dateiSchreiben.Write( strSchreiben, sizeof( strSchreiben ) ); 
        dateiSchreiben.Close(); 
    }
    //Für Ordner5
    if(Ordner==5)
    {
        CFile dateiLesen( strPath + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + "\\" + Ordner4 + "\\" + Ordner5 + "\\" + Name, CFile::modeRead );
    
        //Datei einlesen
        dateiLesen.Read( str, sizeof( str ) ); 
        dateiLesen.Close(); 
        m_strText = str; 
    
        int m = m_strText.Replace("12345", m_strZufallszahl);
        int s = m_strText.Replace('Ì', ' ');
    
        //Datei Speichern!
        UpdateData( TRUE ); 
        _tcscpy( strSchreiben, m_strText );
        CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + "\\" + Ordner4 + "\\" + Ordner5 + "\\" + Name, CFile::modeCreate | CFile::modeWrite ); 
        dateiSchreiben.Write( strSchreiben, sizeof( strSchreiben ) ); 
        dateiSchreiben.Close(); 
    }
    
    }
    

    Ist umständlich gemacht ich weis, aber wir wollen dass es erstmla funktioniert bevor wir es verfeinern etc

    Bitte helft mir waru er net speichert



  • weis denn keiner rat?



  • Du solltest Vorher eine DEBUG machen wenn du eine Ausnahme bekommst und dir dann die Betreffende Zeile ansehen.
    Solltest du den Fehler dann noch nicht haben, poste die Zeile und relevante Variablen bzw. Aufrufe dazu.

    Insbesonders Variablen und aufrufe nach der Art

    CString Ordner1, CString Ordner2, CString Ordner3

    schau ich mir normalerweise nicht an da dies unübersichtlich und somit anstrengend ist.

    CStringArray oder ähnliches hätte es da auch getan und der Code wird übersichtlicher.

    [ Dieser Beitrag wurde am 11.09.2002 um 13:40 Uhr von Unix-Tom editiert. ]

    [ Dieser Beitrag wurde am 12.09.2002 um 10:52 Uhr von Unix-Tom editiert. ]



  • ok sorry, ich hab es schon 100 mal gedebuggt ich poste die entscheidenden zeilen, es ist soagr nur eine, aber wenn man die net im zusammen hang mit den anderen hat glaub ich versteht man es net,a lso hier mal was nicht funktioniert:

    Also das Verzeichnis Ordner1.......bis5 wurde erfolgreich gestellt, gehen wir davon mal aus, warum funktioniert dann das hier nicht:

    CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + "\\" + Ordner4 + "\\" + Ordner5 + "\\" + Name, CFile::modeCreate | CFile::modeWrite );
    


  • Hi du,
    kann es vielleicht sein, dass in der zeile ein '+ "\"' zuviel drinnen ist?!

    //...
    Ordner2 + "\\" + Ordner3 + "\\" + "\\" + Ordner4 + "\\" + Ordner5 + "\\" //...
    

    is halt alles ziemlich unübersichtlich...

    Striker

    [ Dieser Beitrag wurde am 11.09.2002 um 17:46 Uhr von Striker editiert. ]



  • kannst du aus deinem ortnersch**** nicht mal ne for schleife machen?
    entschuldige aber das musste mal gesagt werden 😉



  • Original erstellt von <linsnif>:
    kannst du aus deinem ortnersch** nicht mal ne for schleife machen?
    entschuldige aber das musste mal gesagt werden ;)**

    Hab ich soch auch schon geschrieben. Nimm CStringArray oder ähnliches und erstell emal eine Schleife.
    Es wird sich bei dieser Großartigen übersicht keiner so schnell dein Porblem ansehen.
    Ausserdem lernst du dadurch schönen Code zu schreiben.

    CStringArray stringdaten;
    stringdaten.Add("ordner1");
    stringdaten.Add("ordner2");
    stringdaten.Add("ordner3");
    stringdaten.Add("ordner4");
    
    for (int i = 0;i < stringdaten.GetSize();i++)
    {
    stringdaten.GetAt(i);  // Liefert den String
    }
    


  • Hallo BigMama,

    vor allem würde ich das Problem mal "reduzieren". Also wenn du mit dem Schreiben von Dateien Probleme hast, dann würde ich das erstmal "fokusieren" und den (bereits mehrfach erwähnten) Ordnerscheiss mal weglassen.

    Ich frage mich z.B., was es hiermit

    UpdateData( TRUE ); 
        _tcscpy( strSchreiben, m_strText );
        CFile dateiSchreiben( m_strPfad + "\\" + m_strZufallszahl + "OGS" + "\\" + Name, CFile::modeCreate | CFile::modeWrite ); 
        dateiSchreiben.Write( strSchreiben, sizeof( strSchreiben ) ); 
        dateiSchreiben.Close();
    

    auf sich hat?? Vor allem das _tsccpy hab ich noch nie gebraucht. Und wenn es eh ein TextFile werden soll, dann nimm lieber CStdioFile. Dann schreibt sichs leichter - nämlich so:

    void CMainFrame::OnBearbeitenWriteFile() 
    {
        // TODO: Code für Befehlsbehandlungsroutine hier einfügen
    
        CFileException error;
        CStdioFile dummy;
        dummy.Open("dummy.txt", CFile::modeCreate|CFile::modeWrite, &error);
    
        if (error.m_cause)
        {
            error.ReportError();
        }
        else
        {
            CString intoFile = "Das ist der String der da nacher rein muss!!";
            dummy.WriteString(intoFile);
            dummy.Close();
        }
    }
    

    Wenn das dann mal klappt, dann würde ich mir was Nettes für den (bereits mehrfach erwähnten) Ordnerscheiss einfallen lassen.

    Also quasi immer schön der Reihe nach... 😉

    Grüße, Volle.

    P.S.: Verrätst du auch, für was das alles gut ist. Würde mich ja schon interessieren... 🙂


Anmelden zum Antworten