2011-05-06 52 views
0

我在c#2005中創建了一個標記表程序,它的工作正常,它正在輸入並使用下面的代碼顯示輸出。現在如果我想這個程序的輸出也被複制到位於我的C或任何驅動器中的新文件中。我該怎麼辦?我試過IO.StreamWriter,但它不工作。將輸出寫入C#2005中的文件

using(System.IO.TextWriter writer = System.IO.File.CreateText(@"C:\1.txt")) 
     { 
Console.WriteLine("\t\tMarksheet - Prislogix Public School"); 
       Console.Write("\n\nStudent Name : " + name); 
       Console.Write("\nClass : " + cls); 
       Console.Write("\nRoll Number : " + roll); 
       Console.Write("\n\nSubject\t\tObtained Marks\t\tTotal Marks"); 
       Console.Write("\n\nChemistry\t\t" + chem + "\t\t75"); 
       Console.Write("\nEnglish\t\t\t" + eng + "\t\t100"); 
       Console.Write("\nCalculus\t\t\t" + urd + "\t\t100"); 
       Console.Write("\nDiscrete\t\t\t" + sin + "\t\t75"); 
       Console.Write("\nMathematics\t\t" + mat + "\t\t100"); 
       Console.Write("\nPhysics\t\t\t" + phy + "\t\t75"); 
       Console.Write("\nComputer\t\t" + comp + "\t\t100"); 
       Console.Write("\nMethods\t\t" + isl + "\t\t50"); 
       float tot = chem + eng + urd + sin + mat + phy + comp + isl; 
       Console.Write("\n\n\t\t\tTotal Obtained Marks : " + tot + "\tOut Of 625"); 
       float per; 
       per = (tot/625) * 100; 
       Console.Write("\n\t\t\tPercentage : " + per + "%"); 
       if (per < 49 && per > 40) 
       { 
        Console.Write("\n\t\t\tFAILED!"); 
       } 
       if (per <= 59 && per >= 50) 
       { 
        Console.Write("\n\t\t\tGrade : C"); 
       } 
       if (per <= 69 && per >= 60) 
       { 
        Console.Write("\n\t\t\tGrade : B"); 
       } 
       if (per <= 79 && per >= 70) 
       { 
        Console.Write("\n\t\t\tGrade : A"); 
       } 
       if (per <= 89 && per >= 80) 
       { 
        Console.Write("\n\t\t\tGrade : A+"); 
       } 
       if (per <= 100 && per >= 90) 
       { 
        Console.Write("\n\t\t\tGrade : A-ONE"); 
       } 
      } 
} 
      Console.ReadLine(); 
+0

可能重複的[如何寫入文本文件](http://stackoverflow.com/questions/4138779/how-to-write-to-a-text-file) – Bobby 2011-05-06 10:15:10

+1

你是什麼意思,它不是加工?有錯誤嗎?當你完成它時,你必須在作者身上調用'Close()',或者把它放到一個使用塊中。 – 2011-05-06 10:15:55

+0

您發佈的代碼有一個關閉'}',沒有打開'{'。你可以在你說你嘗試使用'StreamWriter'的地方發佈代碼嗎? – 2011-05-06 10:16:29

回答

2

StreamWriter確實工作。這是一種遺憾,你沒有向我們展示你使用它的企圖。

創建 a StreamWriter寫入文件的最簡單方法是使用File.CreateText。那麼您應該能夠以與Console.Write相同的方式使用StreamWriter.Write。不要忘記用using聲明:

using (TextWriter writer = File.CreateText("...")) 
{ 
    // Write stuff here 
} 

這可以確保作家將在using語句,這將刷新並關閉該文件的末尾處。

如果你想寫入控制檯和文件,你可能需要一個「三通」 TextWriter其寫入到兩個輸出...或者你可以只看文件運行該程序後。

需要注意的一件事:在Windows中,正常行尾是\r\n,而不僅僅是\n。如果問題只是在記事本中所有輸出看起來像是在一行上,那可能是問題所在。考慮使用WriteLine而不是Write,在行尾寫出平臺默認行結束符。

如果所有這些都失敗了,請告訴我們什麼地方出了問題,比「它不工作」更詳細。

+0

兄弟我試着給你的代碼,但我的給定文件仍然是空的... – Aliza 2011-05-06 10:26:46

+0

@Aliza:請用你試過的* actual *代碼更新你的問題。 – 2011-05-06 10:28:08

+0

我粘貼了所有我使用(textwriter .....){}打印的代碼,但是我的文件仍然是空的 – Aliza 2011-05-06 10:28:16

1

將所有調用更改爲Console.Write,以便它們寫入StringBuilder實例。打印完成後,您可以執行以下操作:

Console.Write(stringBuilder.ToString()); 
System.IO.File.WriteAllText("your path here", stringBuilder.ToString()); 

這可能是最簡單的修復方法。它仍然會將輸出寫入控制檯,但它也會寫入所需的文件。

+0

這是什麼stringbuilder? – Aliza 2011-05-06 10:29:55

+0

System.Text.StringBuilder是用於構建大型字符串的緩衝區。寫入的速度非常快,並且允許您使用ToString提取字符串。 http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx – 2011-05-06 10:32:46

+0

但在我的visual studio 2005中沒有顯示 – Aliza 2011-05-06 10:39:27