Загрузка строки в виде текстового файла в 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);