0

根据要求,我们将用户、密码和个人资料图片存储在 .txt 文件中。用户可以被重定向到个人资料修改页面,他们可以在其中更改密码和/或密码图片。

当用户单击“确定”时,我需要替换 .txt 文件中的密码和/或头像名称。

users.txt 文件的布局如下:

mike mike Avatar1
jessica123 123jessica Avatar4
mohd MoHd Avatar3
xiao AxiaoA Avatar2
anna abcANNAabc Avatar1

在做了一些研究后,我尝试使用:

userFilePath = userFilePath.Replace(Session["password"].ToString(),
                                    passwordTextBox.Text);

原始密码通过我用来在文件中查找原始文本的会话变量存储在登录时。

但这不起作用。我对 c# 很陌生。任何帮助,将不胜感激。

4

3 回答 3

2

请注意,您只需更改相关行,许多用户可能具有相同的密码,因此您必须逐行读取文件,识别相关登录名,当然不要替换任何内容,因为登录名或头像也可以具有相同的值作为密码,但使用新信息重新创建该行,然后使用新的整个文本值保存文件。

只是针对这种需求的建议,最好使用关系数据库。

于 2012-10-12T02:29:54.243 回答
1

除了将信息存储在纯文本文件中并将密码保存为其他人已经提到的坏主意的明文之外,我认为最好避免在文件级别直接修改字符串。最好将其抽象为(列表)对象,然后修改对象并将其保存回磁盘。如果您仍想使用纯文本文件,您可以使用名为FileHelpers的库轻松完成此操作,而无需重新发明轮子。

另外要考虑的事情是,如果您坚持将其保存在文本文件中,请切换到结构更好的文本文件,如 JSON 或 XML 格式。您不再需要使用上述库,因为 .NET 已经为这两者提供了反序列化器。

于 2012-10-12T02:31:15.847 回答
0

如果可能的话,您应该听取对您问题的评论的建议,而不是以这种方式这样做。

如果由于某种原因这是不可能的,那么这里是一个开始的地方。您希望在加载阶段将整个文件从文件系统加载到内存中,通常是在您的应用程序启动或第一次需要数据时。

一旦数据位于内存中的某个结构中,您就可以像更改 C# 中的任何对象一样进行更改。

完成对内存的更改后,您会将整个内容写回文件,覆盖旧文件。

所以你的问题是一个很大的问题,你如何从文件中读取数据?你如何在内存中创建一个数据结构来保存这个特定的数据集?以及如何将数据写回文件?我建议按照这个顺序一次处理一个。

哦,如果您没有数据库,但您可以更改文件格式,将其切换为 XML 或 JSON,然后将其从文件存储到内存并返回到文件的过程会容易得多。

于 2012-10-12T02:31:10.870 回答