I'm trying to write multiple strings to a txt file in order to save that information when the user switches pages. However, the strings seem to never be saved.
Entry. (source of strings to write to file)
<Entry
x:Name="Entry"
Placeholder="Username"
WidthRequest = "200"
VerticalOptions = "Start"
HorizontalOptions = "Center"
/>
Code to write information to file.
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();
}
Code to read file.
{
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();
}
All usernames from previous instances are not saved. What am I doing wrong?
when you write the file, you are doing this
// 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++)
this will generate a file something like this
3
myusername
user1
user2
user3
then when you read the file, you are doing this
// 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++)
instead, do this
// 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++)