从正确的用户名行获取密码表单文件

时间:2017-09-27 00:38:43

标签: c#

我有一个用户名|密码文件,其中用户名由密码中的管道分隔,每行都有这样的用户名/密码组合

在知道用户名的同时,我希望能够获得相应的密码

let containerView: UIView = {
    let view = UIView()
    view.addSubview(self.awesomeView2)
    view.addSubview(self.title)
    view.addSubview(self.catName)
    view.addSubview(self.datePublished)
    return view
}()

mainScrollView.addSubview(containerView)

1 个答案:

答案 0 :(得分:0)

如果您改为使用ReadAllLinesReadLines,则会从文件中获取一系列可以搜索的行,并将|字符上的每一行分开。拆分的第一部分(索引0)将是用户名,第二部分(索引' 1')将是密码。

在下面的代码中,我们使用StartsWith查找以用户名开头的第一行和" |"字符,然后返回该字符串的密码部分。如果找不到用户名,它将返回null

static string GetPassword(string userName, string filePath = @"C:\userPass.txt")
{
    if (userName == null) throw new ArgumentNullException(nameof(userName));

    if (!File.Exists(filePath))
        throw new FileNotFoundException("Cannot find specified file", filePath);

    return File.ReadLines(filePath)
        .Where(fileLine => fileLine.StartsWith(userName + "|"))
        .Select(fileLine => fileLine.Split('|')[1])
        .FirstOrDefault();
}

请注意,这会对用户名进行区分大小写的比较。如果您想允许不区分大小写,可以使用:

.Where(fileLine => fileLine.StartsWith(userName + "|", StringComparison.OrdinalIgnoreCase))

<强>用法

string username = "Johnny";
string password = GetPassword(username); 

// If the password is null at this point, then either it 
// wasn't set or the username was not found in the file