1

テキストファイルから読み取る方法の例と、文字列を「パブリック」(静的または定数)にする方法の例を示すいくつかの投稿を見てきましたが、「関数」内で2つを組み合わせることができませんでしたそれは私にとって理にかなっています。

「MyConfig.txt」というテキスト ファイルがあります。その中で、私は2行を持っています。

 MyPathOne=C:\TestOne
 MyPathTwo=C:\TestTwo

次のようなものを使用して、フォーム内のどこからでも MyPathOne と MyPathTwo の両方にアクセスできるようにして、フォームを開始したときにそのファイルを読み取れるようにしたいと考えています。

ReadConfig("MyConfig.txt");

私が今それをやろうとしている方法は、うまくいきませんが、これです:

public voice ReadConfig(string txtFile)
{
    using (StreamReader sr = new StreamResder(txtFile))
    {
        string line;
        while ((line = sr.ReadLine()) !=null)
        {
            var dict = File.ReadAllLines(txtFile)
                           .Select(l => l.Split(new[] { '=' }))
                           .ToDictionary( s => s[0].Trim(), s => s[1].Trim());
        }
        public const string MyPath1 = dic["MyPathOne"];
        public const string MyPath2 = dic["MyPathTwo"];
    }
}

txt ファイルが 5 行または 6 行を超えることはおそらくないでしょう。

どこからでも名前でパス変数にアクセスでき、400行のコードなどを追加しない限り、最善、安全、最速、最も簡単な方法で問題ありません。

データを XML に保存する必要があると人々が言う多くの投稿を読みましたが、ファイルの読み取りと変数部分の取得はどちらの方法でもほとんど同じであるため、その部分はそれほど重要ではないと思います。それはさておき、誰か (エンド ユーザー) が XML を理解しなくても編集できるプレーンな txt ファイルを使用できるようにしたいと考えています。(もちろん、空白行のチェック、パスが存在するかなどの多くのチェックを意味します...その部分を実行しても問題ありません。最初にこの部分を機能させたいだけです)。

ReadAllLines を配列に使用するさまざまな方法について読んだことがありますが、新しい別の「クラス」ファイルを作成すると言う人もいます (これはまだよくわかりませんが、作業中です)。主に、これを行うための「安定した」方法を見つけたいと思っています。(ちなみに、プロジェクトは.Net4とLinqを使用しています)

ありがとう!!

4

4 に答える 4

0

関数の外部で変数を定義して、他の関数からアクセスできるようにする必要があります。

public string MyPath1; // (Put these at the top of the class.)
public string MyPath2;

public voice ReadConfig(string txtFile)
{
    var dict = File.ReadAllLines(txtFile)
                   .Select(l => l.Split(new[] { '=' }))
                   .ToDictionary( s => s[0].Trim(), s => s[1].Trim());  // read the entire file into a dictionary.

    MyPath1 = dict["MyPathOne"];
    MyPath2 = dict["MyPathTwo"];
}
于 2013-04-06T03:05:17.830 に答える
0

あなたが提供したコードはコンパイルさえしません。代わりに、これを試すことができます:

public string MyPath1;
public string MyPath2;

public void ReadConfig(string txtFile)
{
    using (StreamReader sr = new StreamReader(txtFile))
    {
        // Declare the dictionary outside the loop:
        var dict = new Dictionary<string, string>();

        // (This loop reads every line until EOF or the first blank line.)
        string line;
        while (!string.IsNullOrEmpty((line = sr.ReadLine())))
        {
            // Split each line around '=':
            var tmp = line.Split(new[] { '=' }, 
                                 StringSplitOptions.RemoveEmptyEntries);
            // Add the key-value pair to the dictionary:
            dict[tmp[0]] = dict[tmp[1]];
        }

        // Assign the values that you need:
        MyPath1 = dict["MyPathOne"];
        MyPath2 = dict["MyPathTwo"];
    }
}

考慮に入れるには:

  1. public フィールドをメソッドに宣言することはできません。

  2. const実行時にフィールドを初期化することはできません。代わりに、コンパイル時に定数値を指定します。

于 2013-04-06T03:39:35.037 に答える
0

この質問は、テキストファイルからパラメーターを取得するに似ています

(そこに答えを入れました。ここに貼り付けることは「できません」。)

(この質問に重複として「フラグを立てる」必要があるかどうかわかりません。「フラグを立てる」「閉じる」。)

(重複した質問が統合されることはありますか? [しばしば不十分な] 質問または [不十分で過剰な] 回答の文言には、それぞれの長所があります。統合されたバージョンはすべての中で最高のものになる可能性がありますが、統合が些細なことはめったにありません.)

于 2017-02-23T23:25:09.773 に答える