2016-04-08 28 views
1

Şu anda uygulamamla ilgili bir sorun yaşıyorum ve bunun yalnızca benim mantığım olduğunu düşünmeye başladım. Bu formlara ve MSDN'e göz attıktan sonra bile anlayamıyorum.StreamWriter proje dizini ve alt dizini?

Uygulama dizinimde bir metin belgesi oluşturmak ve bu belgeyi içeren bir alt klasör oluşturmak için StreamWriter kullanmaya çalışıyorum. Şu anda sadece benim apps exe dizininde dosya damping tutar.

 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

sadece bir tahmin, ama 'recipeDirectory' muhtemelen bir '\' ile bitmiyor, bu yüzden ile sonuçlanırsiniz: 'C: \ foo \ Recpiesmyrecipe.txt' yerine: C: \ foo \ Recipies \ myrecipie.txt" – CodingGorilla

+0

Bu doğru, yaratılıyor dosya + dosya dizini adı.Aşağıdaki cevabı görüyorum: –

cevap

3

bu deneyin: Bence

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

nedeni, recipeDirectory ve RecipeName + @".txt" ters eğik çizgi ile ayrılmış değildir, bu yüzden dosya yerine üst dizine yazılı ve recipeDirectory + RecipeName + @".txt" adlı olmasıdır.

bir kenara olarak

, Ben de senin RecipeName herhangi bir ad bir dosya adında kullanılamaz karakterler içeren durumunda böyle bir dezenfektanı işlevi geçmesine öneriyoruz:

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

Ben de aynı düşünmüştüm, ama bu dosyanın açık bir şekilde isimlendirileceğinin açık olacağını düşünürdünüz .. – CodingGorilla

+1

Açıkçası göreceli olarak ... –

+0

"Path.Combine" bunu sizin için yapmıyor mu? –