2016-05-25 13 views
0

私はfile.exeを閉じるたびにFile.txtにカウンタを書きます。
たとえば、初めて閉じるときは、1を書き込む必要があります.1の代わりに2回、2にする必要があります.3回に3回する必要があります。FileStreamが終了すると同時にFileStreamリーダーとライター

しかし、問題は、任意の時点で、コンパイラはファイルに格納された番号を読み取り、インクリメントしてから書き込む必要があることです。このような

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Windows.Forms; 

namespace check 
{ 
    public partial class Form1 : Form 
    { 
     public string[] line = { "1", "2", "3", "4", "5", "6", "7", "8", "9","10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20" }; 
     public int i = 0; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      FileStream textfile = new FileStream(@"C:\TtAL.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); 
      var Reader = new StreamReader(textfile); 
      var Writer = new StreamWriter(textfile); 
      i = Convert.ToInt32(File.ReadAllText(@"C:\TtAL.txt")); 
      if (File.ReadAllText(@"C:\TtAL.txt") == null) { i = -1; } 
      i ++; 
      File.WriteAllText(@"C:\TtAL.txt", line[i]); 

      MessageBox.Show(20 - Convert.ToUInt32(line[i]) + " times remained."); 
      textfile.Close(); 
     } 
    } 
} 
+0

私は 'using'ブロックにそのコードを置く

は、ここに私のコードです。また、同時に読んだり書いたりする必要はありません。数値を読み、変数に格納し、変数に1を加え、それを書いてください( 'using'ブロックは閉じ/破棄など)。 –

答えて

1

何かが動作します:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    int i = 1; 

    if (File.Exists(@"C:\TtAL.txt")) //if there is a file try to use it 
    { 
     if (int.TryParse(File.ReadAllText(@"C:\TtAL.txt"), out i)) //if you can get a number use it 
      i++; 
    } 

    File.WriteAllText(@"C:\TtAL.txt", i.ToString()); 
} 
+0

なぜ 'StreamWriter'ですか? 'File.WriteAllText(@" C:\ TtAL.txt "、i.ToString());'それだけではなく、 'using'の中に' sw.Close() 'を行う必要はありません。 –

+0

あなたは間違いない、遅くここに私はそれを指摘してくれた、それを編集します! – chehh984

+0

おかげさまで、私はちょうど私の問題を解決しました。 真のコードはここにあります: FileStream ABCD =新しいFileStream(@ "C:\ Program Files(x86)\ TtAL.txt"、FileMode.OpenOrCreate、FileAccess.ReadWrite、FileShare.None); StreamReader Reader =新しいStreamReader(ABCD); StreamWriter Writer =新しいStreamWriter(ABCD); int repeat = 0; do {spended_times_of_trial_mode = Convert.ToInt32(Reader.ReadLine()); spended_times_of_trial_mode ++; ABCD .SetLength(0); Writer.WriteLine(spended_times.ToString());繰り返し= Convert.ToInt32(Console.ReadLine()); } while(repeat!= 0); Writer.Close(); –

関連する問題