Windows Azure: исключение аргумента не обработано - PullRequest
0 голосов
/ 22 июня 2010

Я хочу, чтобы мое приложение 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 Ответ

1 голос
/ 22 июня 2010

Я предполагаю, что метод Finalize StreamWriter закрывает основной поток (поэтому в следующий раз через цикл вы не сможете записать в этот 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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...