Projektname als Dateiname einer Textdatei


janananini1982

Grünschnabel
Hallo zusammen,

ich habe ein Problem bei dem ich nicht weiterkomme.

Folgender Code erstellt eine .txt im Projektordner und zeigt mir in der Form das aktuelle Projekt an:
Code:
#region EingabemaskeLogBuch / Form 
    private void LogBuch_Load(object sender, EventArgs e)
    {
        //Prüfen ob eine LogBuch-Datei schon existiert
        sProjectpathLogBook = PathMap.SubstitutePath("$(DOC)" + @"\LogBuch.txt");   
        if (!File.Exists(sProjectpathLogBook))
        {
            DialogResult Result = MessageBox.Show("LogBuch-Datei für diese Projekt existiert nicht!\nAnlegen?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
            if (Result == DialogResult.No)
            {
                this.Close();
            }
            else
            {
                File.Create(sProjectpathLogBook).Close();
            } 
        }

        //Anzeigen des Projektes in der Form
        string strProjectName = PathMap.SubstitutePath("$(PROJECTNAME)");
        this.ProjectName.Text = "Eintrag für: " + strProjectName;
    }
    #endregion
Nun möchte ich, dass die erstellte Datei nicht Logbuch.txt heißt, sondern Projektname_Logbuch.txt.

Wie kann ich den Code anpassen, damit automatisch das jeweilige Projekt als Dateiname gewählt wird?



Ich danke euch vielmals im Voraus,

Jana
 

ikosaeder

Teekannen-Agnostiker
Du musst den Teil
Code:
//Anzeigen des Projektes in der Form
        string strProjectName = PathMap.SubstitutePath("$(PROJECTNAME)");
        this.ProjectName.Text = "Eintrag für: " + strProjectName;
nach oben schieben.
Dann erzeugst du eine Variable fürs logbuch
Code:
string strLogBuch=strProjectName+"_Logbuch.txt";
und statt "Logbuch.txt" schreibst du strLogBuch
in diese Zeile
Code:
sProjectpathLogBook = PathMap.SubstitutePath("$(DOC)" + @"\LogBuch.txt");
 

janananini1982

Grünschnabel
Cool, danke, das funktioniert.

Leider wird nun eine Datei erzeugt, die so heißt:
"DOCProjectName_Logbuch.txt"

Statt ProjectName steht der richtige Projektname da, das passt. Aber das "DOC" am Anfang soll eigentlich der Ordner sein, in dem das Textfile gespeichert wird.

Hab ich was übersehen?
 

janananini1982

Grünschnabel
So sieht der Code jetzt aus:

Code:
#region Eingabemaske LogBuch / Form
    private void LogBuch_Load(object sender, EventArgs e)
    {
        //Anzeigen des Projektes in der Form
        string strProjectName = PathMap.SubstitutePath("$(PROJECTNAME)");
        string strLogBuch=strProjectName+"_Logbuch.txt";
        this.ProjectName.Text = "Eintrag für: " + strProjectName;
        //Prüfen ob eine LogBuch-Datei schon existiert
        sProjectpathLogBook = PathMap.SubstitutePath("$(DOC)" + @strLogBuch);   
        if (!File.Exists(sProjectpathLogBook))
        {
            DialogResult Result = MessageBox.Show("LogBuch-Datei für diese Projekt existiert nicht!\nAnlegen?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
            if (Result == DialogResult.No)
            {
                this.Close();
            }
            else
            {
                File.Create(sProjectpathLogBook).Close();
            }
        }

        
    }
 

ComFreek

Mod | @comfreek
Moderator
if (!File.Exists(sProjectpathLogBook)) { DialogResult Result = MessageBox.Show("LogBuch-Datei für diese Projekt existiert nicht!\nAnlegen?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (Result == DialogResult.No) { this.Close(); } else { File.Create(sProjectpathLogBook).Close(); } }
Das ist eine klassische Race Condition. Am besten gleich Datei laden mit CREATE_ON_NON_EXISTS (oder wie das in deiner Programmeirsprache heißt).
 

janananini1982

Grünschnabel
Ich meine, ich verstehe den ganzen Beitrag nicht...:giggle:

CREATE_ON_NON_EXISTS (oder wie das in deiner Programmeirsprache heißt)

Keine Ahnung was er damit meint.
Kannst du es mir in einer Zeile als Programmschnipsel erklären?
 

zerix

Hausmeister
Moderator
Das was ich sagte, ist das was er mit seinem Beitrag meint. Er wusste nicht, wie das Flag oder was auch immer heißt, in der Programmiersprache die du nutzt.
Es ist möglich eine Datei zu öffnen, wenn sie da ist. Es führt aber zu einem Fehlerfall, wenn sie nicht existiert. Je nach Programmiersprache kann man dann ein Flag oder was andere mitgeben, mit dem man sagt, dass die Datei geöffnet werden soll, wenn sie da ist. Wenn sie aber nicht da ist, soll sie erstellt werden und dann geöffnet werden. Somit gibt es keinen Fehlerfall.

@ComFreek wusste nun halt nicht, wie das in deiner genutzten Programmiersprache zu lösen ist und hat deshalb das selbstausgedachte Fantasieflag CREATE_ON_NON_EXISTS (in deutsch: Erstelle, wenn nicht existent ) geschrieben.

Viele Grüße
Sascha
 

ikosaeder

Teekannen-Agnostiker
Cool, danke, das funktioniert.

Leider wird nun eine Datei erzeugt, die so heißt:
"DOCProjectName_Logbuch.txt"

Statt ProjectName steht der richtige Projektname da, das passt. Aber das "DOC" am Anfang soll eigentlich der Ordner sein, in dem das Textfile gespeichert wird.

Hab ich was übersehen?
Schau dir doch mal an, was SubstitutePath genau macht. Dann sollte eigentlich schnell klar werden, wie du zu deinem Ergebnis kommst.
 

janananini1982

Grünschnabel
Ich dachte das heißt:
Erstelle eine Datei in einem Ordner, der DOC heißt.

Im Script des ersten Posts klappt das auch noch aber jetzt halt nicht mehr.