使用C#处理文件

时间:2019-03-15 19:22:30

标签: c#

我有一个项目,我必须将所有数据保存在文本文件中。
这些文件之一是 users.txt ,其中包含我所有的用户名
和密码。

我想做的是从 users.txt 中读取我的所有记录,并保存它们
在“用户列表”中,应在项目启动时完成此过程。

根据项目的过程(添加用户或删除用户),可以增加或减少列表。

此后,我想在项目关闭时将列表保存到相同的文件中
(或在关闭程序时)

我希望清楚了解该项目的想法。

这是我的github存储库,其中包含项目代码。

https://github.com/HeshamRashwanAM/Online-Book-Store-Project

  

用户: 是我创建的一个类,它具有字符串用户名字符串密码用户类型列表,与类名相同。

2 个答案:

答案 0 :(得分:0)

您可能想编写一个小解析器。像这样将数据存储在文本文件中:

  

用户名:用户名 |密码:密码

使读取文件更加容易。要读取/写入文件,请使用以下命令:

static List<user> ReadUsers()
    {
        List<user> tmp_users = new List<user>();
        var Lines = File.ReadAllLines(AppDomain.CurrentDomain.BaseDirectory + "users.txt");
        foreach (var line in Lines)
        {
            user user = new user();
            String[] AccDetails = line.Split(new[] { "|" }, StringSplitOptions.None);
            var username = AccDetails[0].Split(new[] { ":" }, StringSplitOptions.None);
            var password = AccDetails[1].Split(new[] { ":" }, StringSplitOptions.None);
            user.Username = username[1];
            user.Password = password[1];
            tmp_users.Add(user);
        }
        return tmp_users;
    }
    static void WriteUsers()
    {
        using (StreamWriter writer = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "users.txt", false))
        {
            foreach (user user in users)
            {
                writer.WriteLine("Username:" + user.Username + "|Password:" + user.Password);
            }
        }
    }

编辑:如果要在打开/关闭fomr时触发此事件,请创建form.Load()/ form.Close()事件并将代码放在此处。 编辑2:Github存储库与执行用户管理的控制台应用程序:Repo

答案 1 :(得分:0)

如果在程序退出时等待保存,则可以删除那里的所有数据。相反,您应该同步并保存所有更改以确保完整性。您可以使用此库或检查其设计https://github.com/rsevil/Transactions 您想要做的是跟随事务,然后每次添加或删除时再做一次,永远不要等待!如果失败并尽快失败,别无选择! 伪代码:

transaction block {
  create new users file in temp
  move users to somewhere where you can roll back
  move new file to current users file
}

随着时间的流逝,我会警告您一次,您会开始想“为什么我要折磨自己,为什么不使用sqlite之类的东西”?