我看过几个帖子给出了如何从文本文件中读取的示例,以及如何使字符串'public'(static或const)的示例,但我无法将这两个组合在一个'函数中'以一种对我有意义的方式。
我有一个名为'MyConfig.txt'的文本文件。 在那,我有2行。
MyPathOne=C:\TestOne
MyPathTwo=C:\TestTwo
我希望能够在启动表单时读取该文件,使MyPathOne和MyPathTwo可以从表单内的任何位置访问,使用类似这样的内容:
ReadConfig("MyConfig.txt");
我现在尝试这样做的方式,这是不行的,是这样的:
public voice ReadConfig(string txtFile)
{
using (StreamReader sr = new StreamResder(txtFile))
{
string line;
while ((line = sr.ReadLine()) !=null)
{
var dict = File.ReadAllLines(txtFile)
.Select(l => l.Split(new[] { '=' }))
.ToDictionary( s => s[0].Trim(), s => s[1].Trim());
}
public const string MyPath1 = dic["MyPathOne"];
public const string MyPath2 = dic["MyPathTwo"];
}
}
txt文件可能永远不会超过5或6行,我不会停留使用StreamReader或字典。
只要我可以从任何地方按名称访问路径变量,并且它不会添加400行代码或其他东西,那么我可以做任何最好,最安全,最快速,最简单的事情。
我读了许多帖子,人们说数据应该存储在XML中,但我认为这部分真的无关紧要,因为读取文件和获取变量部分几乎都是相同的。除此之外,我宁愿能够使用普通的txt文件,某人(最终用户)可以编辑而无需理解XML。 (这当然意味着大量的空行检查,路径是否存在等等......我很乐意做这一部分,只是想让这个部分先工作)。
我已经阅读了将ReadAllLines用于数组的不同方法,有些人说要创建一个新的单独的“类”文件(我还没有真正理解它......但是正在研究它)。主要是我想找到一种'稳定'的方法来做到这一点。 (项目正在使用.Net4和Linq)
谢谢!
答案 0 :(得分:0)
您需要在函数外部定义变量,以使其可供其他函数访问。
public string MyPath1; // (Put these at the top of the class.)
public string MyPath2;
public voice ReadConfig(string txtFile)
{
var dict = File.ReadAllLines(txtFile)
.Select(l => l.Split(new[] { '=' }))
.ToDictionary( s => s[0].Trim(), s => s[1].Trim()); // read the entire file into a dictionary.
MyPath1 = dict["MyPathOne"];
MyPath2 = dict["MyPathTwo"];
}
答案 1 :(得分:0)
您提供的代码甚至无法编译。相反,你可以试试这个:
public string MyPath1;
public string MyPath2;
public void ReadConfig(string txtFile)
{
using (StreamReader sr = new StreamReader(txtFile))
{
// Declare the dictionary outside the loop:
var dict = new Dictionary<string, string>();
// (This loop reads every line until EOF or the first blank line.)
string line;
while (!string.IsNullOrEmpty((line = sr.ReadLine())))
{
// Split each line around '=':
var tmp = line.Split(new[] { '=' },
StringSplitOptions.RemoveEmptyEntries);
// Add the key-value pair to the dictionary:
dict[tmp[0]] = dict[tmp[1]];
}
// Assign the values that you need:
MyPath1 = dict["MyPathOne"];
MyPath2 = dict["MyPathTwo"];
}
}
考虑到:
您无法将公共字段声明为方法。
您无法在运行时初始化const
个字段。相反,您在编译时为它们提供常量值。
答案 2 :(得分:0)
知道了。谢谢!
public static string Path1;
public static string Path2;
public static string Path3;
public void ReadConfig(string txtFile)
{
using (StreamReader sr = new StreamReader(txtFile))
{
var dict = new Dictionary<string, string>();
string line;
while (!string.IsNullOrEmpty((line = sr.ReadLine())))
{
dict = File.ReadAllLines(txtFile)
.Select(l => l.Split(new[] { '=' }))
.ToDictionary( s => s[0].Trim(), s => s[1].Trim());
}
Path1 = dict["PathOne"];
Path2 = dict["PathTwo"];
Path3 = Path1 + @"\Test";
}
}
答案 3 :(得分:0)
此问题与Get parameters out of text file 类似
(我在那里给出答案。我&#34;可以&#39;#34;将它粘贴在这里。)
(不确定我是否应该&#34;标记&#34;这个问题重复。&#34;标记&#34;&#34;关闭&#34;。)
(重复的问题是否得到巩固?每个问题都可以在[经常蹩脚]问题的措辞或[不足和过度伸展]答案中得到优点。合并后的版本可能是最好的,但合并很少是微不足道的。 )