0

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

以下是我目前用于从 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);
}
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 版本。在这里,我们显式地迭代 FileName 并将它们作为键添加到我们的字典中,同时再次调用File.ReadAllText它们中的每一个。

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

在每个片段的最后一行设置一个断点,运行它们并查看字典的内容以确定结果。

编辑:问题不清楚,但似乎您只对单个文件名感兴趣。这意味着您根本不需要 LINQ(m_settings需要是 a 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 回答