查看解决方案的评论 - 文件位置错误
我到处寻找答案,但我找不到答案。这对我来说真的很令人沮丧,因为我从来没有用任何其他编程语言从文件中读取这么多麻烦。
我正在尝试从基本即时消息程序的文本文件中提取用户名和密码。我不会发布所有代码 - 它太长了,而且很可能不相关,因为文本文件是在程序的最开始时读取的。
以下是我试图阅读的文本文件(“users.ul”)的内容:
admin.password
billy.bob
sally.sal
以下是从文本文件中读取的代码:
users = new Dictionary<string, User>();
System.Console.WriteLine("users.ul exists: " + File.Exists("users.ul"));
// Check the status of users.ul. If it exists, fill the user dictionary with its data.
if (File.Exists("users.ul"))
{
// Usernames are listed first in users.ul, and are followed by a period and then the password associated with that username.
StreamReader reader = new StreamReader("users.ul");
string line;
int count = 0;
while ((line = reader.ReadLine()) != null)
{
string[] splitted = line.Split('.');
string un = splitted[0].Trim();
string pass = splitted[1].Trim();
User u = new User(un, pass);
// Add the username and User object to the dictionary
users.Add(un, u);
count++;
}
System.Console.WriteLine("count: " + count);
reader.Close();
}
这是我的代码产生的输出:
users.ul exists: True
count: 1
添加到用户词典的唯一数据是“admin”,密码为“password”。其他行被忽略。
请帮帮我。没有多个用户,我的程序没用。我到处寻找解决方案,包括本网站上的其他类似问题。从没想过从文件中读取会让我浪费那么多时间。
答案 0 :(得分:10)
除非您特别需要经历使用StreamReader的严格要求,否则我建议使用File.ReadAllLines()
,它返回一个(可枚举的)字符串数组。
更好的是,使用linq: - )
System.Console.WriteLine("users.ul exists: " + File.Exists("users.ul"));
// Check the status of users.ul. If it exists, fill the user dictionary with its data.
if (File.Exists("users.ul")) {
var lines = File.ReadAllLines("users.ul");
// Usernames are listed first in users.ul, and are followed by a period
// and then the password associated with that username.
var users = lines.Select(o => o.Split('.'))
.Where(o => o.Length == 2)
.Select(o => new User(o[0].Trim(), o[1].Trim());
System.Console.WriteLine("count: " + users.Count());
}
答案 1 :(得分:5)
无法抗拒将其重构成一个单行的诱惑:
var users = File.ReadAllLines("users.ul").Select(l => new User(l.Substring(0, l.IndexOf('.')), l.Substring(l.IndexOf('.') + 1))).ToDictionary(u => u.Name);