2017-09-27 47 views
-1

我有一個用戶名|密碼文件,其中用戶名是從密碼管道分開,每行有這樣的用戶名/密碼組合從正確的用戶名行以密碼形式的文件

雖然知道用戶名,我會希望能夠得到相應的密碼

string text = System.IO.File.ReadAllText(@"C:\userPass.txt"); 
string username = "Johnny"; 

回答

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 
+0

感謝你爲這個乾淨和簡單的解決方案,但我得到「的方法或操作未實現「試圖運行此代碼時 – Isaz

+0

在哪一行?它對我來說工作正常... –

+0

你需要提示在代碼文件的頂部有'使用System.Linq;' –

相關問題