This is obviously an exercise/homework so it's really for you to write the code. We can help with a bit of instruction though.

If you're going to use File.ReadAllLines then it will return a String array where each element is a line from the file. You then have random access to those lines, so you can access any one of them at any time by index. If you use a StreamReader then you will call ReadLine repeatedly, maybe in a loop, and you have only sequential access to the lines of the file. In this case, you only need to read forwards so either will do the job.

Presumably you are allowed to assume that the file format is valid so there is no need to allow for invalid data. That means that you can be confident that the first line contains "#Users" and you can then read subsequent lines until you get an empty String and that is your list of users. You can then be confident that the next line contains "#Stats" and then you will have two lines for each item in the list of users that you read previously, with the first being the name and the second being the HP score.

So, have a go at it and, if you still have issues, post back here and show us what you've tried, explain your reasoning and tell where reality differs from expectation. We can then help you to fix the issues yourself. The best way to learn is to do so you should do.