2016-04-08 1 views
1

Ich habe gerade ein Problem mit meiner Anwendung und ich fange an zu denken, dass es nur meine Logik ist. Ich kann es nicht herausfinden, selbst nachdem ich diese Formulare und MSDN gelesen habe.StreamWriter zu Projektverzeichnis und Unterverzeichnis?

Ich versuche, StreamWriter zu verwenden, um ein Textdokument in meinem Anwendungsverzeichnis zu erstellen und einen Unterordner zu erstellen, der dieses Dokument enthält. Momentan wird die Datei nur in meinem Apps-Ex-Verzeichnis abgelegt.

 string runTimeDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

     string recipeDirectory = Path.Combine(runTimeDirectory, "Recipes"); 
     if (!Directory.Exists(recipeDirectory)) 
     { 
      //Recipes directory doesnt exist so create it 
      Directory.CreateDirectory(recipeDirectory); 
     } 

     // Write text to file 
     using (StreamWriter OutputFile = new StreamWriter(recipeDirectory + RecipeName + @".txt")) 
     { 
+0

Nur eine Vermutung, aber 'recipeDirectory' endet wahrscheinlich nicht mit einem' \ ', so dass Sie am Ende mit:' C: \ foo \ Recpiesmyrecipe.txt' anstelle von: 'C: \ foo \ Recipies \ myrecipie.txt" – CodingGorilla

+0

Das ist richtig, es wird erstellt die Datei + der Name des Dateiverzeichnisses Ich sehe mein Problem in der Antwort unten –

Antwort

3

Versuchen Sie folgendes:

using (StreamWriter OutputFile = new StreamWriter(
    Path.Combine(recipeDirectory, RecipeName + @".txt"))) 

Der Grund, warum ich glaube, ist, dass Ihr recipeDirectory und RecipeName + @".txt" nicht durch den umgekehrten Schrägstrich getrennt, so dass die Datei in das übergeordnete Verzeichnis geschrieben wird, statt und recipeDirectory + RecipeName + @".txt" benannt.

Als Nebenwirkung, würde ich Sie auch Ihre RecipeName durch eine Sanitizer Funktion wie diese übergeben, falls empfehlen einen beliebigen Namen Zeichen enthält, die nicht in einem Dateinamen verwendet werden können:

internal static string GetSafeFileName(string fromString) 
{ 
    var invalidChars = Path.GetInvalidFileNameChars(); 
    const char ReplacementChar = '_'; 

    return new string(fromString.Select((inputChar) => 
     invalidChars.Any((invalidChar) => 
     (inputChar == invalidChar)) ? ReplacementChar : inputChar).ToArray()); 
} 
+0

Ich dachte das Gleiche, aber Sie würden denken, dass dies offensichtlich wäre, da die erstellte Datei den wonky Namen haben würde – CodingGorilla

+1

Offensichtlichkeit ist relativ ... –

+0

Macht 'Path.Combine' das nicht für dich? –