Чтение и запись текстового файла в хранилище Azure

Ниже приведен код, позволяющий сначала сохранить строку текста в текстовый файл, находящийся в хранилище Azure, а затем прочитать его и распечатать.

string firstString = "this \t is \n a \t line \n are: ";            

            using (var memoryStream = new MemoryStream())
            {
                memoryStream.Write(System.Text.Encoding.UTF8.GetBytes(firstString), 0, System.Text.Encoding.UTF8.GetBytes(firstString).Length);
                blockBlob.UploadFromStream(memoryStream);
            }

            string text;
            using (var memoryStream = new MemoryStream())
            {
                blockBlob.DownloadToStream(memoryStream);
                text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
                Trace.WriteLine(text);
            }

Проблема в том, что в инструкции Trace.Writeline () ничего не печатается.

Сначала я подумал, что это может быть проблема с кодировкой, поэтому я изменил формат своего текстового файла с ASCII на UTF8, но все равно ничего не печатается. Что мне здесь не хватает, любая помощь приветствуется.


person Spandan    schedule 12.06.2013    source источник


Ответы (2)


Замените следующую строку кода:

 using (var memoryStream = new MemoryStream())
            {
                memoryStream.Write(System.Text.Encoding.UTF8.GetBytes(firstString), 0, System.Text.Encoding.UTF8.GetBytes(firstString).Length);
                blockBlob.UploadFromStream(memoryStream);
            }

с участием

    using (var memoryStream = new MemoryStream())
    {
        memoryStream.Write(System.Text.Encoding.UTF8.GetBytes(firstString), 0, System.Text.Encoding.UTF8.GetBytes(firstString).Length);
        memoryStream.Position = 0;
        blob.UploadFromStream(memoryStream);
    }

Что происходит, когда вы записываете массив байтов в memoryStream, вы не сбрасываете позицию потока на 0, поэтому загружается 0-байтовый blob.

person Gaurav Mantri    schedule 12.06.2013
comment
@Gaurav Mantri Какое решение, если это растровое изображение (не текст) - person Bashar Abu Shamaa; 11.06.2015
comment
@BasharAbuShamaa То же решение. То же должно работать. - person Gaurav Mantri; 11.06.2015
comment
System.Text.Encoding.UTF8.GetBytes (MyBitMapImg) не работает! - person Bashar Abu Shamaa; 11.06.2015
comment
ААА понятно. Это будет работать для текстовых данных, а не для двоичных данных. Для чтения потока вам потребуется использовать функции с растровыми изображениями. Вы можете опубликовать свою проблему как отдельный вопрос. - person Gaurav Mantri; 11.06.2015
comment
Да, да, спасибо: stackoverflow.com/questions/30784058/ - person Bashar Abu Shamaa; 11.06.2015

Когда вы используете MemoryStream, вы сначала записываете в память, а после записи из памяти в большой двоичный объект лучше писать напрямую в большой двоичный объект, например:

    using (var blobStream = blockBlob.OpenWrite())
    {
        var data = System.Text.Encoding.UTF8.GetBytes(firstString);
        blobStream.Write(data, 0, data.Length);
    }
person Vasyl Senko    schedule 18.08.2017