2016-05-25 17 views
0

我想在File.txt中写一个计数器,只要我关闭我的file.exe
例如,在第一次关闭它时,它必须写入1,第二次而不是1,它必须是2,第三次必须是3,依此类推。FileStream在file.exe关闭的同时读写器

但问题是,在任何时候,编译器都必须读取存储在文件中的数字,然后将其增加,然后编写它。

这里是我的代码:

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加到变量中,然后写入(使用''块将处理关闭/处理等等)。 –

回答

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

感谢帅哥,我刚刚解决了我的问题。 true code is here: FileStream ABCD = new 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()); repeat = Convert.ToInt32(Console.ReadLine()); } while(repeat!= 0); Writer.Close(); –