2016-04-08 219 views
1

我目前對我的應用程序有問題,我開始認爲這只是我的邏輯。即使在瀏覽這些表單和MSDN後,我也無法弄清楚。StreamWriter到項目目錄和子目錄?

我正在嘗試使用StreamWriter在我的應用程序目錄中創建文本文檔並創建包含該文檔的子文件夾。目前它只是將文件保存在我的應用程序的exe目錄中。

 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

只是一個猜測,但'recipeDirectory'可能不會以'\'結尾,所以你最終得到:'C:\ foo \ Recpiesmyrecipe.txt'而不是:'C:\ foo \ Recipies \ myrecipie.txt「 – CodingGorilla

+0

這是正確的,它創建文件+文件目錄名我在下面的答案中看到我的問題 –

回答

3

試試這個:

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

我想原因是你recipeDirectoryRecipeName + @".txt"沒有被反斜槓隔開的,因此文件寫入到父目錄,而不是和命名recipeDirectory + RecipeName + @".txt"

順便說一句,我也建議你通過RecipeName通過這樣的消毒功能的情況下,任何名稱中包含不能在文件名中使用的字符:

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

我以爲相同,但你會認爲這將是顯而易見的,因爲所創建的文件將具有晦澀的名字 – CodingGorilla

+1

明顯是相對的... –

+0

不是'Path.Combine'爲你做的嗎? –