1

動作を停止したコードがいくつかあります。それ自体は変わっていませんが、機能しなくなりました。

これは、メモリストリームを使用してアプリの外部からテキスト データをインポートし、それをアプリ内で渡し、最終的にテキストを文字列に変換することに関するものです。次のコード フラグメントは、問題をカプセル化しています。

    [TestMethod]
    public void stuff()
    {
        using (var ms = new MemoryStream())
        {
            using (var sw = new StreamWriter(ms))
            {
                sw.Write("x,y,z"); //"x,y,z" is usually a line of string data from a textfile
                sw.Flush();
                stuff2(ms);
            }
        }

    }

    void stuff2(Stream ms)
    {
        using (var sr = new StreamReader(ms))
        {
            stuff3(sr.ReadToEnd());
        }

    }

    void stuff3(string text)
    {
        var x = text; //when we get here, 'text' is an empty string.
    }

何か不足していますか?「テキスト」には元の値が必要であり、不思議なことに今日まで常にそうでした。これは、私が持っているものが壊れやすいことを示唆していますが、何が間違っているのでしょうか?

ティア

4

2 に答える 2

4

ストリームの現在の位置を忘れています。「x,y,z」データをストリームに書き込んだ後、ストリームの位置はデータの最後を指します。データを読み取るには、ストリームの位置を戻す必要があります。そのようです:

    static void stuff2(Stream ms)
    {
        ms.Seek(0, SeekOrigin.Begin);
        using (var sr = new StreamReader(ms))
        {
            stuff3(sr.ReadToEnd());
        }

    }
于 2013-09-27T14:36:12.777 に答える
1

You have to "reset" your mememory stream. Change your code to:

[TestMethod]
public void stuff()
{
    using (var ms = new MemoryStream())
    {
        using (var sw = new StreamWriter(ms))
        {
            sw.Write("x,y,z"); //"x,y,z" is usually a line of string data from a textfile
            sw.Flush();
            stream.Seek(0, SeekOrigin.Begin);
            stuff2(ms);
        }
    }

}
于 2013-09-27T14:37:14.557 に答える