2010-06-22 52 views
0

我希望Azure应用程序创建一个blob并向其中写入数据。当我尝试了,我得到这个例外指出Windows Azure:参数异常未处理

ArgumentException的是未处理

流是不可写

这里是我的代码

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

我的猜测是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()));