C#读取文件并搜索更改

时间:2018-08-28 20:36:00

标签: c#

我是C#初学者,我想编写一个程序,每30秒读取一次配置文件,并检查特定值的某些更改。

我要搜索的值并不总是在同一行号上,因此我要通过键名来搜索这些值。我想找到密钥,然后检查值是否已更改。

首先,我正在测试是否可以在配置文件中找到正确的密钥。

这是我尝试过的。我的问题是我用以下输入调用了此函数:

check_for_changes("TEXTURE_MAX_LOAD =");

并且我希望我的TextBox testtb在调用该方法后包含单词changes,但TextBox仍为空白。

public string check_for_changes(string value)
{
    int counter = 0;
    string line;


    System.IO.StreamReader file =
        new System.IO.StreamReader(@"C:\Users\EFB\AppData\Roaming\Microsoft\FSXDemo\fsx.CFG");

    while ((line = file.ReadLine()) != null)
    {
        if (line.Contains(value))
        {
            testtb.Text = "changes";
            break;
        }

        counter++;
    }

    Console.WriteLine("Line number: {0}", counter);

    file.Close();
    return value;
}

1 个答案:

答案 0 :(得分:0)

您需要将此代码放在要开始检查的位置:

 System.Windows.Forms.Timer Timer = new System.Windows.Forms.Timer() { Interval = 30000 };
 Timer.Tick += (obj, arg) =>
 {
     check_for_changes("TEXTURE_MAX_LOAD =");
 };
 Timer.Start();

小心!!!如果要结束此定时器或要再次停止/启动它,则必须全局声明它。

函数应类似于:

 private string LastValue = "";
 public string check_for_changes(string value)
 {
     int counter = 0;
     string line;


     System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\EFB\AppData\Roaming\Microsoft\FSXDemo\fsx.CFG");

     while ((line = file.ReadLine()) != null)
     {
         if (line.Contains(value))
         {
             string NewValue = line.Substring(value.Length);
             if (NewValue != LastValue)
                  testtb.Text = "new Value is : " + NewValue;
             LastValue = NewValue;
             break;
         }

         counter++;
     }

     Console.WriteLine("Line number: {0}", counter);

     file.Close();
     return value;
 }

此功能将起作用。