Загрузка строки в виде текстового файла в SkyDrive?

Я пытаюсь использовать C# с API Live Connect, чтобы загрузить пустой (или тот, который говорит "тест") текстовый файл в SkyDrive. Код у меня так далеко:

LiveConnectClient client = await LiveSignin();
string folderID = await getFolder(client);
client.BackgroundUploadAsync(folderID, "pins.txt", "", OverwriteOption.Rename);

где LiveSignin() - это функция, которая обрабатывает код входа и возвращает LiveConnectClient, а getFolder (клиент LiveConnectClient) - это функция, которая получает идентификатор папки, в которую я пытаюсь загрузить.

Этот код выдает ошибку о том, что пустая строка (третий параметр в последней строке) должна быть "Windows.Storage.Streams.IInputStream", но я не могу найти никакой документации о том, как преобразовать строку в IInputStream или, если на то пошло, большую часть любой документации по "IInputStream", которую я могу найти.

В более ранних версиях Windows Runtime/Live Connect (в другом проекте) я использовал:

byte[] byteArray = System.Text.Encoding.Unicode.GetBytes(Doc);
MemoryStream stream = new MemoryStream(byteArray);
App.client.UploadCompleted += client_UploadCompleted;
App.client.UploadAsync(roamingSettings.Values["folderID"].ToString(), docTitle.Text + ".txt", stream);

но это приводит к большому количеству ошибок (большинство из них, потому что UploadAsync был заменен BackgroundUploadAsync).

Итак, есть ли способ преобразовать строку в IInputStream, или мне даже не нужно использовать IInputStream? Если мой метод просто не работает, как можно загрузить пустой текстовый файл в SkyDrive из приложения C# Metro? (разработка в Visual Studio 2012 Express для оценки Windows 8 Enterprise, если это имеет большое значение)

РЕДАКТИРОВАТЬ: я наконец нашел "Stream.AsInputStream", но теперь я получаю ту же ошибку, как это

Необработанное исключение типа "System.AccessViolationException" произошло в Windows.Foundation.winmd

Дополнительная информация: Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена

код сейчас:

LiveConnectClient client = await LiveSignin();
string folderID = await getFolder(client);
Stream OrigStream = new System.IO.MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes("test"));
LiveOperationResult result = await client.BackgroundUploadAsync(folderID, "pins.txt", OrigStream.AsInputStream(), OverwriteOption.Rename);

1 ответ

Решение

Привет

У меня была та же проблема сегодня, и, насколько я вижу, единственное решение этой проблемы - сначала записать свой текст в локальный файл, а затем загрузить его.

Мое решение выглядит так:

var tmpFile= await ApplicationData.Current.
                       LocalFolder.CreateFileAsync
                         ("tmp.txt", CreationCollisionOption.ReplaceExisting);

using (var writer = new StreamWriter(await tmpFile.OpenStreamForWriteAsync()))
{
    await writer.WriteAsync("File content");
}
var operationResult = 
      await client.BackgroundUploadAsync(folderId, tmpFile.Name, tmpFile,
                                          OverwriteOption.Overwrite);
Другие вопросы по тегам