Windows Azure:Argument Exception未处理

时间:2010-06-22 08:16:42

标签: exception-handling azure

我希望我的Azure应用程序创建一个blob并将数据写入其中。当我尝试它时,我得到了这个例外,说明

  

ArgumentException未处理

     

Stream无法写入

这是我的代码

var ms = new MemoryStream();
            for (int k = 0; k < 10; k++)
            {
                using (StreamWriter sw = new StreamWriter(ms))
                {
                    string val = k.ToString();
                    if (k + 1 != len)
                        val = val + " ";
                    sw.Write(val);
                    sw.Flush();
                }
            }
            ms.Position = 0;
            blob.UploadFromStream(ms);

我的代码在k = 0时执行。当k = 1时抛出异常。 谁能告诉我如何解决这个异常

此外,这是写入blob的正确程序吗?如果不是,我哪里出错了以及如何纠正它。

1 个答案:

答案 0 :(得分:1)

我的猜测是StreamWriter的Finalize方法关闭了底层流(因此下次循环时,你不能写入该MemoryStream)。

我认为你可以通过在整个循环中使用“using(StreamWriter sw = new StreamWriter(ms))”块来解决这个问题。无论如何,它可能比创建新的StreamWriter更有效。

无论如何,如果你只是在写文字,那么最好做一些事情:

StringBuilder sb = new StringBuilder();
for (int k = 0; k < 10; k++)
{
    sb.Append(k.ToString());
    if (k + 1 != len) sb.Append(" ");
}
blob.UploadText(sb.ToString());

或(对于这个特殊用途),得到花哨。 :-)(完全未经测试):

blob.UploadText(string.Join(" ", Enumerable.Range(0, 10).Select(k => k.ToString()).ToArray()));