Question

I have the following code:

StringReader contentReader = new StringReader(this.dataContent.ToString());

After I parse my DataContent, I need to reset the poistion of the contentReader to begining of the string. How do I do it? I dont see a set poistion option in StringReader

Was it helpful?

Solution

Set it to a new instance of StringReader. I don't believe you can change the position of an existing one.

contentReader = new StringReader(this.dataContent.ToString());

OTHER TIPS

Another option would be to load the string into a MemoryStream then use a StreamReader to iterate over it. MemoryStream definitely supports position resets on a memory stream.

String data = "Hello! My name it Inigo Montoya.";
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
    using (StreamReader reader = new StreamReader(stream))
    {
        // Do your parsing here using the standard StreamReader methods.
        // They should be fairly comparable to StringReader.

        // When all done, reset stream position to the beginning.
        stream.Seek(0, SeekOrigin.Begin);
    }
}

The StringReader keeps track of its position within the string with a private int field called _pos, if you want to reset it you can use a simple extension method like this:

public static void Reset(this StringReader reader)
{
    reader.GetType()
          .GetField("_pos", BindingFlags.NonPublic | BindingFlags.Instance)
          .SetValue(reader, 0);
}

And a test method:

[Test]
public void Reset()
{
    const string random = "this is a test string";
    using(var reader = new StringReader(random))
    {
        Assert.AreEqual(random, reader.ReadToEnd());
        Assert.IsEmpty(reader.ReadToEnd());

        reader.Reset();
        Assert.AreEqual(random, reader.ReadToEnd());
        Assert.IsEmpty(reader.ReadToEnd());
    }
}

See also a similar question : How do you reset a C# .NET TextReader cursor back to the start point?

But as Matthew said, the solution is probably to simply create a new one.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top