c# - 为什么重新加载页面时通过 StreamWriter 写入文件的文本不会保存?(Xamarin)
问题描述
我正在尝试将多个字符串写入 txt 文件,以便在用户切换页面时保存该信息。但是,字符串似乎永远不会被保存。
入口。(写入文件的字符串源)
<Entry
x:Name="Entry"
Placeholder="Username"
WidthRequest = "200"
VerticalOptions = "Start"
HorizontalOptions = "Center"
/>
将信息写入文件的代码。
private void Write()
{
StreamWriter sw = new StreamWriter(path);
sw.WriteLine(txtStorage.Length);
//Writes length so that txtStorage can be correct length later
sw.WriteLine(Entry.Text);
//Writes username entered in this instance of the page
for (int i = 0; i < txtStorage.Length; i++)
{
sw.WriteLine(txtStorage[i]);
//Writes usernames stored from previous instances
};
sw.Close();
}
读取文件的代码。
{
StreamReader sr = new StreamReader(path);
txtStorage = new string[Convert.ToInt32(sr.ReadLine())];
//updates txtstorage to new length written in text file
for (int i = 0; i < txtStorage.Length; i++)
{
txtStorage[i] = sr.ReadLine();
//puts all usernames back into txtstorage
};
sr.Close();
}
以前实例中的所有用户名都不会保存。我究竟做错了什么?
解决方案
当你写文件时,你正在这样做
// 1. write the length of the array
sw.WriteLine(txtStorage.Length);
// 2. write the user name
sw.WriteLine(Entry.Text);
// 3. write the array
for (int i = 0; i < txtStorage.Length; i++)
这将生成一个类似这样的文件
3
myusername
user1
user2
user3
那么当你阅读文件时,你正在这样做
// 1. read the length as a string
txtStorage = new string[Convert.ToInt32(sr.ReadLine())];
// 2. you aren't doing anything to handle line #2
// 3. you are using the LENGTH of txtstorage, which is 1, so your loop is only executing once
// and since you skipped #2, you are also starting on the wrong line
for (int i = 0; i < txtStorage.Length; i++)
相反,这样做
// 1. read the length as an int
var ndx = int.Parse(sr.ReadLine());
// 2. read the user name
var user = sr.ReadLine();
// 3. use ndx as the loop counter, starting on the correct line
for (int i = 0; i < ndx; i++)
推荐阅读
- java - Java 覆盖问题(确定实现类中的参数/返回类型)
- variables - 由于路径可变,FTP 任务失败
- html - 用于导航网页和下载 CSV 的 VBA 脚本
- api - 新的 DEV API 是否缺少数据?
- javascript - 在javascript中计算deltaE94
- css - Tailwind - Flex-No-Shrink 和 Flex-Wrap 的工作原理
- pip - 为什么“pip help”没有列出--upgrade?
- asp.net-web-api - .NET Web Api UserManagerExtensions.ConfirmEmail
- python - 尝试在 requirements.txt 中的 openshift 中构建 python 应用程序时出错
- python - 用 Python 3 支付信用卡的几个月错误的预期输出