我正在尝试使用C#和Live Connect API将空白(或称为“test”)文本文件上传到SkyDrive。我到目前为止的代码:
LiveConnectClient client = await LiveSignin();
string folderID = await getFolder(client);
client.BackgroundUploadAsync(folderID, "pins.txt", "", OverwriteOption.Rename);
其中LiveSignin()是一个处理登录代码并返回LiveConnectClient的函数,而getFolder(LiveConnectClient客户端)是一个获取我试图上传到的文件夹ID的函数。
该代码抛出一个关于空字符串(最后一行的第三个参数)的错误必须是“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?如果我的方法不起作用,如何从C#Metro应用程序将空白文本文件上传到SkyDrive? (在Visual Studio 2012 Express上开发评估Windows 8企业版,如果这有很大不同)
编辑:我终于找到了“Stream.AsInputStream”,但现在我收到了与this相同的错误“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);
答案 0 :(得分:0)
您好
今天遇到同样的问题,据我所知,解决这个问题的唯一方法是先将文本写入本地文件,然后上传。
我的解决方案如下:
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);