【发布时间】:2012-08-09 05:36:59
【问题描述】:
有没有办法将文件的内容存储为字符串或字典,而不仅仅是文件路径/名称?
以下是我目前用于从 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);
}
【问题讨论】:
-
是的,您将文件读入带有(天哪!)
System.IO.Filexxx类的数组。 -
您的代码允许多选。是否要存储所有选定文件的内容?
-
你需要给方法名加上括号。
string[] lines = System.IO.File.ReadAllLines();。这正是我告诉codesparkle 向您展示LINQ 版本会带来更多混乱的原因。在某些 LINQ 行中,您可以“将函数传递给 LINQ”,我的意思是:Give-LINQ-A-Function。在这些情况下,您就像使用变量一样,所以您只需编写System.IO.File.ReadAllLines。但是,现在您想立即运行该功能,而不是把它交给别人来玩。你想调用函数,你用括号来做:System.IO.File.ReadAllLines()。 -
还有一件事:
System.IO.File.ReadAllLines需要一个参数,因为必须告诉该函数您要读取什么文件。如果你只写一个System.IO.File.ReadAllLines()这将是一个错误,因为它不知道该读什么。因此,必须传递一个文件名:string[] lines = System.IO.File.ReadAllLines("c:\\blah\\boom.ini");,现在就可以了。当然,文件名不必硬编码,可以放在变量中,也可以直接从 fileDialog.FileName 中获取:string[] lines = System.IO.File.ReadAllLines(dialog.FileName); -
这里是“新手”的 LINQ 混淆:请注意,LINQ 表示
paths.ToDictionary(filePath => filePath, File.ReadAllText),因此 ReadAllText 没有参数,而“手工代码”表示.. = File.ReadAllText(filename);,否则这是一个错误。多亏了一些智能机制,LINQ 能够为您猜测和插入参数 - 但前提是您必须非常小心地制作其余部分。
标签: c# forms dictionary ini