Как преобразовать MemoryStream из запроса Google Drive Get в XML-файл C #? - PullRequest
0 голосов
/ 12 апреля 2019

Я работаю в .Net Core 2, использую API Google Drive v3 и извлекаю файл XML. Я получаю обратно MemoryStream, но не могу прочитать MemoryStream в XmlDocument. Я пробовал пару файлов, и размер потока памяти соответствует размеру файла, поэтому я уверен, что я получаю данные точно. Как мне превратить MemoryStream в XmlDocument? Или строка, которую я могу разобрать в XML?

Я попытался загрузить поток в документ XML и средство чтения текста. Программа чтения текста возвращается с пустой строкой, а загрузчик xml сообщает, что родительский узел не найден.

//Fetch the file from Google Drive
var request = _driveService.Files.Get(fileId);
var stream = new System.IO.MemoryStream();
request.Download(stream);

//How I Try and parse to string
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();

//How I try to load to xml
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(stream);

1 Ответ

1 голос
/ 12 апреля 2019

Для XmlDocument звучит так, что возвращаемое вами, возможно, не будет действительным XML без небольшого массажа, поэтому вам следует начать с реализации на основе MemoryStream, чтобы увидеть, что вы получаете от службы. .

Чтобы работал , вам нужно «перемотать» поток. Потоки имеют понятие «текущая позиция», например, курсор, и такие методы, как Download, традиционно оставляют курсор в конце данных после загрузки их в поток. Иногда это не имеет значения, например, когда вы используете FileStream для записи данных непосредственно в файл, но если вы загружаете данные в MemoryStream и затем хотите сразу же прочитать их, вам нужно сначала сбросьте курсор назад к началу потока с помощью stream.Seek(0, SeekOrigin.Begin).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...