将CSV文件中的值加载到Windows Form C#Dictionary

时间:2015-10-18 11:13:11

标签: c# windows forms csv dictionary

我对C#相当新,似乎无法找到我在网上寻找的东西。我需要为"Authenticate"用户创建一个具有用户名和密码功能的应用程序。良好的凭据(如"Admin, Pa$$w0rd"等)将保存在`CSV文件中,加载到我的Authenticator.cs中的Dictionary中,然后使用用户在表单上的文本框中提供的任何内容进行验证。然后按下按钮,输入将与CSV和Authenticated进行比较。希望我足够清楚。

到目前为止,我设法创建了表单和文本框等,以及Authenticator类(从我的控制台应用程序中复制,代码如下,但尚未针对表单进行更改)

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. 比较输入数据与加载数据
  3. 创建一个日志文件(csv),其中注册了每个"Authentication"次尝试的日期时间,使用的用户名和使用的密码。
  4. 非常感谢。

1 个答案:

答案 0 :(得分: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;
        }
    }
}
​