【问题标题】:Dealing with file using c# [closed]使用c#处理文件[关闭]
【发布时间】:2019-03-15 19:22:30
【问题描述】:

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

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

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

之后我想在项目关闭时将我的列表保存到同一个文件
(或关闭程序时)

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

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

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

User : 是我创建的一个类,它有 string usernamestring password >用户类型列表与类名相同。

【问题讨论】:

标签: c#


【解决方案1】:

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

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

为了更容易阅读文件。要读取/写入文件,请使用以下内容:

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

【讨论】:

  • 我将创建一个静态构造函数,其中包含从启动开始的程序生命周期中只发生一次的过程。我想知道的是程序关闭时如何写入文件。如果有些事情不够清楚,请告诉我。
  • 我没听懂,你能用简单的代码示例解释一下你的想法吗?感谢您的努力!
  • 如果您仍然无法弄清楚,也许将您的整个 Visual Studio 项目发布在 github 上并将链接发送给我,我会尽我所能进一步帮助您。如果我能够帮助您,请在赞成/反对票下方打勾以接受答案。
  • 我会这样做的。
  • 已上传抱歉等待。
【解决方案2】:

如果您在程序退出时等待保存,那么您几乎可以丢失那里的所有数据。相反,您应该同步并保存每个更改以确保完整性。你可以使用这个库或检查他们的设计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 之类的东西”只是说

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多