0

おそらく非常に単純な初心者の質問です。基本的に、私が書いたサービスを制御する多くの変数を含む txt ファイルがあります。現在、そこから変数を必要とするすべてのボイドで、ファイルを開き、ファイルを読み取り、行を選択してから変数を使用しています。

私の質問は、変数をグローバルに割り当てる方法があるかどうかです。私のすべてのボイドがそれらを使用できるように。そうすれば、すべてを読み取ってファイルを開き、すべてを変数に割り当てるだけで済みます。ほとんどの場合、同じ変数を探してファイルを複数回開いている現在の方法ではありません。

質問を編集し、より良い説明を試みるためにいくつかのコードを追加しました。その下には2つのボイドがあります。どちらも同じファイルを開いていますが、ファイル内の別の行を探しています。ファイル全体を読み取る「グローバル」変数リストを作成して、必要な情報が必要になるたびにファイルを開く代わりに、必要な変数を呼び出すことができるかどうか疑問に思っています。

       public void day_timer()
    {
        string temptimer = "";
        string timeloop = "";
        using (var streamReader = System.IO.File.OpenText(@"C:\somefile"))
        {
            var lines = streamReader.ReadToEnd().Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            foreach (var line in lines)
            {
                if (line.Contains("Day_Time:"))
                {
                    temptimer = line;
                    continue;
                }
            }
        }
        timeloop = temptimer.Remove(0, 9);
        int inter = Convert.ToInt32(timeloop);
        System.Timers.Timer timer1 = new System.Timers.Timer();
        InitializeComponent();
        timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
        timer1.Interval = inter * 1000 * 60;
        timer1.Enabled = true;
        timer1.Start();
        error_handling("backup started " + DateTime.Now + ". Incremental Backup set to every " + timeloop + " Minutes", "Incbackuplog.txt");
    }

    //Incrememtal Backup Timer
    public void inc_timer()
    {
        string temptimer = "";
        string timeloop = "";
        using (var streamReader = System.IO.File.OpenText(@"C:\somefile"))
        {
            var lines = streamReader.ReadToEnd().Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            foreach (var line in lines)
            {
                if (line.Contains("Inc_interval:"))
                {
                    temptimer = line;
                    continue;
                }                
            }
        }
        timeloop = temptimer.Remove(0, 13);
        int inter = Convert.ToInt32(timeloop);
        System.Timers.Timer timer1 = new System.Timers.Timer();
        InitializeComponent();
        timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
        timer1.Interval = inter * 1000 * 60;
        timer1.Enabled = true;
        timer1.Start();
        error_handling(" Backup Started "+DateTime.Now+". Incremental Backup set to every "+timeloop+" Minutes", "Incbackuplog.txt");
    }
4

1 に答える 1

0

私見ファイルからの設定には静的クラスをお勧めします。この方法では、クラスが初めてアクセスされたときにのみファイルが読み取られます。

このようなものがあなたに適していることを願っています:

更新: ファイルの読み取りロジックを入力し、プロパティ呼び出しを追加しました

public static class Configuration
{
    // public set so you can change the configfile location if necessary
    public static string ConfigurationFile { get; set; }

    // variables from configuration file, private set so they cannot be changed except by changing the configuration and reloading
    public static string Inc_interval { get; private set; }
    public static string Day_Time { get; private set; }

    /// <summary>
    /// Static constructor - will be called the first time this class is accessed
    /// </summary>
    static Configuration()
    {
        ConfigurationFile = @"C:\somefile";
        ReadConfigFile();
    }

    /// <summary>
    /// Calling this method will reload the configuration file
    /// </summary>
    public static void Reload()
    {
        ReadConfigFile();
    }

    /// <summary>
    /// Logic for reading the configuration file
    /// </summary>
    private static void ReadConfigFile()
    {
        // ToDo: Read file here and fill properties
        using (StreamReader rd = new StreamReader(ConfigurationFile))
        {
            while (!rd.EndOfStream)
            {
                string line = rd.ReadLine();
                if (line.StartsWith("Day_Time:"))
                    Day_Time = line.Remove(0, 9);
                else if (line.StartsWith("Inc_interval:"))
                    interval = line.Remove(0, 13);
            }
        }

    }
}

これは静的クラスであるため、すべてのクラス、メソッドなどからそのプロパティにアクセスできます。

timeloop = Configuration.Day_Time;
于 2013-10-24T21:55:38.460 に答える