The question is answered, right answer was accepted
Code not working as it should
Hello. I made a code that should make an text file and store language name in it. And it works, it makes a file, and writes language in, but when i want to load this file and read language in another scene, it doesnt work. Here is a piece of script and how i use it:
public void Start ()
{
StreamReader r = File.OpenText(Application.persistentDataPath + "//" + "jezyk.txt");
string jez = r.ReadToEnd ();
r.Close();
jezyk = jez;
if (jezyk.Equals ("polish")) {
guzik1.GetComponentInChildren<Text> ().text = "Szybka gra";
} else if (jezyk.Equals ("english")) {
guzik1.GetComponentInChildren<Text> ().text = "Quick game";
} else if (jezyk.Equals ("russian")) {
guzik1.GetComponentInChildren<Text> ().text = "Быстрая игра";
}
It would help to know how you actually write the text to the file.
Answer by Bunny83 · May 13, 2016 at 12:40 AM
Well, as i said guessed in my comment you're using WriteLine
. WriteLine does write an additional carriage return + line feed at the end of the text. So the file doesn't only contain the text you've written into but also the new line characters. When you do ReadToEnd()
you actually read in the whole file which includes the new line characters. That's why i suggested to print the string length as well. The string length should tell you if the character count is right.
Furthermore you actually overwrite your text file before you read it because you have those lines in front of the reading code:
StreamWriter w;
w = f.CreateText();
w.Close ();
Those lines will create a new text file that will overwrite the existing file, so you end up with an empty file.
To avoid all those issues you could simply use File.WriteAllText
and File.ReadAllText
. Those two methods will write (and overwrite if necessary) the whole file and read the whole file.
// write
File.WriteAllText(Application.persistentDataPath + "//" + "jezyk.txt", "polish");
// read
string jez = File.ReadAllText(Application.persistentDataPath + "//" + "jezyk.txt");
There's no need for deleting the file if you just want to overwrite it.
Instead of writing a file with a single word in it you could simply use PlayerPrefs.
// write
PlayerPrefs.SetString("language", "polish")
// read
string jez = PlayerPrefs.GetString("language", "english");
GetString takes a "key" and a default value in case "language" doesn't exist yet.
Follow this Question
Related Questions
Problem with inventory asset's script and its working 0 Answers
How to use the GPGS ISavedGameMetadata? 1 Answer
How to replace space keyboard with a simple tap on Android? 0 Answers
Help! Values from previous Serialized List<> shows up again after a while using Coroutine 0 Answers
Not able to retrieve information from script in unity. 0 Answers