0

ファイルのパス/名前だけでなく、ファイルの内容を文字列または辞書として保存する方法はありますか?

以下は、Windowsフォームからファイルパスを取得するために現在使用している方法です。それを適応させる方法はありますか、それとも最初から始めるべきですか? テキストのみの .ini ファイルを読み込んでいます。LINQは 1 つのルートのようですが、私はそれに慣れていません。

public void ShowSettingsGui()
{
    System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog();
    ofd.Multiselect = false;
    ofd.Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*";
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        string[] filePath = ofd.FileNames;
    }
    m_settings = Path.GetDirectoryName(ofd.FileName);
}
4

2 に答える 2

4

LINQ は確かにそれを行うための優れた方法です。パスをディクショナリに変換するだけです (そこでキーになります)。値はFile.ReadAllText、すべてのファイル パスで呼び出すことによって決定されます。

var dialog = new OpenFileDialog() { Multiselect = true, 
    Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*" };
if (dialog.ShowDialog() != DialogResult.OK) return;
var paths = dialog.FileNames;
var fileContents = paths.ToDictionary(filePath => filePath, File.ReadAllText);

ここで何が起こっているのかを理解するために、(ほぼ同等の) 非 LINQ バージョンを見てください。ここでは、FileNames を明示的に繰り返し処理し、それらをディクショナリにキーとして追加し、File.ReadAllTextそれらのすべてを再度呼び出します。

// same as first snippet without the last line
foreach (var filePath in paths)
{
    fileContents.Add(filePath, File.ReadAllText(filePath));
}

各スニペットの最後の行にブレークポイントを設定して実行し、辞書の内容を調べて結果を判断します。

編集:質問では明確ではありませんでしたが、単一のファイル名にのみ関心があるようです。つまり、LINQ はまったく必要ありません ( であるm_settings必要がありますstring)。

var dialog = new OpenFileDialog{Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*"};
if (dialog.ShowDialog() != DialogResult.OK) return;
m_settings = File.ReadAllText(dialog.FileName);
于 2012-08-13T00:02:19.853 に答える
0

達成しようとしていることの説明を追加できれば、それが役立ちます。

同じように、設定クラスを使用して設定を保存/読み取るために使用します

ここにそれを使用する方法へのリンクがあります: ユーザー設定を書く

過去にxmlを使用して設定ファイルを解析しましたが、iniを順次読み取るよりもはるかに簡単だと思います。

それが役に立てば幸い

于 2012-08-12T23:56:04.750 に答える