C#:将ini文件的内容存储为字符串或字典而不是文件名?

时间:2012-08-12 23:40:15

标签: c# forms dictionary ini

有没有办法将文件内容存储为字符串或字典而不仅仅是文件路径/名称?

以下是我目前用于从Windows窗体获取文件路径的方法。有没有办法适应它或我应该从头开始?我正在加载.ini文件,这只是文本。 LINQ似乎是一条路线,但我不熟悉它。

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);
}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

如果您可以添加对您要完成的内容的描述,那将会有所帮助。

同样,我会使用设置类

来存储/读取设置

这是一个如何使用它的链接:  write user settings

我在过去的xml中用来解析一个设置文件,我发现它比以顺序方式读取ini容易得多。

希望有所帮助