2016-04-08 14 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 \ Recipies \ myrecipie.txt "ではなく' C:\ foo \ Recpiesmyrecipe.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'はそれをしませんか? –