2015-10-18 3 views
-1

Я довольно новичок в C# и не могу найти то, что ищу в Интернете. Мне нужно создать приложение с возможностями имени пользователя и пароля для пользователя "Authenticate". Хорошие учетные данные, такие как "Admin, Pa$$w0rd" и т. Д., Должны быть сохранены в этом CSV-файле, загруженном в словарь в моем Authenticator.cs, который затем проверяется с помощью того, что пользователь предоставляет в текстовых полях формы. Затем при нажатии кнопки вход сравнивается с CSV и аутентифицируется или нет. Надеюсь, я достаточно ясен.Загрузка значений из файла CSV в Windows Form C# Dictionary

До сих пор мне удалось создать форму и текстовые поля и т.д., а также Authenticator Class (скопированный из моей консоли App, код ниже, не изменились в форме же)

class Authenticator 
{ 
    //Created a Private Dictionary to hide contents 
    private Dictionary<string, string> Users = new Dictionary<string, string>(); 
    public Authenticator() 
    { 
     //Details - adding keys and values to dictionary 
     Users.Add("Administrator", "Pa$$w0rd"); 
     Users.Add("Admin", "password"); 
     Users.Add("root", "secure"); 
    } 

    //Public Bool to Validate dictionary data 
    public bool ValidateCredentials(string username, string password) //Focuses on the username key and password value 
    { 
     return Users.Any(entry => entry.Key == username && entry.Value == password); 
     //When entered username matches the key and password input matches the key 
     //Then bool is true 
    } 
} 

}

Так что, если кто-то знает:

  1. Как я могу загрузить данные CSV в словарь в моем классе
  2. Сравните входные данные против лоа ded data
  3. Сделайте файл журнала (csv), который зарегистрировал каждую "Authentication" попытку с датой, используемым именем пользователя и используемым паролем.

Большое спасибо.

+0

две вещи: [CSVHelper] (https://www.nuget.org/packages/CsvHelper/) Другой хранение пароля в незашифрованном виде нет-нет , – t0mm13b

+0

Пароль хранится в тексте? Вы должны учитывать последствия для безопасности для этого. – disklosr

ответ

0

Используйте Oledb для чтения csv-файла. Что-то вроде этого

using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Text; 
 
using System.Data; 
 
using System.Data.OleDb; 
 
using System.IO; 
 

 
namespace ConsoleApplication1 
 
{ 
 
    class Program 
 
    { 
 
     const string FILENAME = @"c:\temp\test.csv"; 
 
     static void Main(string[] args) 
 
     { 
 
      CSVReader reader = new CSVReader(); 
 

 
      DataSet ds = reader.ReadCSVFile(FILENAME, true); 
 
      DataTable dt = ds.Tables[0]; 
 

 
      Dictionary<string, string> dict = dt.AsEnumerable() 
 
       .GroupBy(x => x.Field<string>(0), y => y.Field<string>(1)) 
 
       .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 
 

 
     } 
 
    } 
 
    public class CSVReader 
 
    { 
 

 
     public DataSet ReadCSVFile(string fullPath, bool headerRow) 
 
     { 
 

 
      string path = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1); 
 
      string filename = fullPath.Substring(fullPath.LastIndexOf("\\") + 1); 
 
      DataSet ds = new DataSet(); 
 

 
      try 
 
      { 
 
       if (File.Exists(fullPath)) 
 
       { 
 
        string ConStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}" + ";Extended Properties=\"Text;HDR={1};FMT=Delimited\\\"", path, headerRow ? "Yes" : "No"); 
 
        string SQL = string.Format("SELECT * FROM {0}", filename); 
 
        OleDbDataAdapter adapter = new OleDbDataAdapter(SQL, ConStr); 
 
        adapter.Fill(ds, "TextFile"); 
 
        ds.Tables[0].TableName = "Table1"; 
 
       } 
 
       foreach (DataColumn col in ds.Tables["Table1"].Columns) 
 
       { 
 
        col.ColumnName = col.ColumnName.Replace(" ", "_"); 
 
       } 
 
      } 
 

 
      catch (Exception ex) 
 
      { 
 
       Console.WriteLine(ex.Message); 
 
       Console.ReadLine(); 
 
      } 
 
      return ds; 
 
     } 
 
    } 
 
} 
 
​
не

Смежные вопросы