有没有办法将文件内容存储为字符串或字典而不仅仅是文件路径/名称?
以下是我目前用于从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);
}
答案 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容易得多。
希望有所帮助