我正在尝试将 C# 与 Live Connect API 一起使用,将空白(或显示“测试”的)文本文件上传到 SkyDrive。我到目前为止的代码:
LiveConnectClient client = await LiveSignin();
string folderID = await getFolder(client);
client.BackgroundUploadAsync(folderID, "pins.txt", "", OverwriteOption.Rename);
其中 LiveSignin() 是一个处理登录代码并返回 LiveConnectClient 的函数,而 getFolder(LiveConnectClient client) 是一个获取我要上传到的文件夹 ID 的函数。
该代码抛出一个关于空白字符串(最后一行的第三个参数)必须是“Windows.Storage.Streams.IInputStream”的错误,但我似乎找不到任何关于如何将字符串转换为 IInputStream 的文档,或者,就此而言,我可以找到关于“IInputStream”的大部分文档。
对于早期版本的 Windows 运行时/实时连接(在另一个项目中),我使用过:
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 Enterprise 的评估进行开发,如果这有很大的不同的话)
编辑:我终于找到了“Stream.AsInputStream”,但现在我遇到了与此相同的错误
Windows.Foundation.winmd 中发生了“System.AccessViolationException”类型的未处理异常
附加信息:试图读取或写入受保护的内存。这通常表明其他内存已损坏
现在的代码:
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);