So basically i was struggling with hangman and i couldn't figure out how to solve it the first problem. That's why i thought i might put in another function; a method to add a word to my textfile of words with StreamWriter
using FileStream
. (I have a StreamReader
too, so i can see what random word it would choose.)
Things tried (with all: writer.WriteLine(text)
):
I tried using StreamWriter writer = new StreamReader(fs.ToString(), append: true)
with FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)
I tried FileMode.Append
(because i want to append), but that only works in write-only mode and i need to read text too.
I tried to use the filestream without the ToSting(), but that resulted in "Cannot convert from 'System.IO.FileStream' to 'string'."
I tried to do the same thing in a different program but only with StreamReader
and FileStream
, but it still didn't change anything in the textfile.
What I actually wish it would do: I expect that the program will be able to append a string to the textfile while still being able to read the chosen word. (When you start the program a random word out of the textfile is chosen.)
Sorry if this looks messy, it's my first time asking a question on stackoverflow.
So why this is different from the duplicate is because i want to append the file, not write (overwrite) it. I tried the exact same FileStream
as the "duplicate", but it only got rid of the error. Now I'm still stuck with a malfunctioning StreamWriter
.
Part of the code:
private static FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
private static StreamReader reader = new StreamReader(fs);
private static string[] words = reader.ReadToEnd().Split(',');
public static Random randomizer = new Random();
private static int wordindex = randomizer.Next(0, words.Length);
public string GetWord()
{
return words[wordindex]; //returns random value out of array = random woord
}
`
And using
for StreamWriter
:
public string AddWordToFile(string word)
{
using (StreamWriter writer = new StreamWriter(fs.ToString(), append: true))
{
//bool ExistsInFile = false;
for (int i = 0; i < words.Length; i++)
{
if (words.Contains(word))
{
//ExistsInFile = true;
return "The word '" + word + "' already exists in the textfile.";
}
}
if (!words.Contains(word))
{
//ExistsInFile = false;
writer.WriteLine("," + word);
writer.Close();
return word + " added.";
}
else
{
return "Whoops, something went wrong :'I";
}
}
}
Another way to do it would be this:
static void ReadAndWrite()
{
string file = File.ReadAllText(@"C:\whatever.txt"); //read C:\whatever.txt
File.AppendAllText(@"C:\whatever.txt", "Text to append"); //append "Text to append" to C:\whatever.txt
}
I've tested this and it works just fine on my PC.
Maybe it helps you.
Edit: This is much easier and reads every line in a file into a string array:
static void ReadAndWrite()
{
string[] words = File.ReadAllLines(@"C:\whatever.txt");
File.AppendAllText(@"C:\whatever.txt", "Word to append\r\n"); //append "Word to append" in a new Line to C:\whatever.txt
}
To get an array of words, write every word into a new line by also appending \r\n
after every word like in the example. This way, you get an array of every word in your file.