ReadAllBytes 用于将文件上传到 Google 驱动器 Windows Phone 8 c#

ReadAllBytes for uploading file to Google Drive in Windows Phone 8 c#

我已经编写了上传过程中的授权部分,但我不知道如何在授权后上传文件。我想上传图片,但我会先尝试使用 txt 文件。

        Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
        body.Title = "My document";
        body.Description = "A test document";
        body.MimeType = "text/plain";

        byte[] byteArray = System.IO.File.ReadAllBytes("document.txt");
        System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

        FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
        request.Upload();

        Google.Apis.Drive.v2.Data.File file = request.ResponseBody;

我在互联网上到处都找到了上面的代码。但看起来它只适用于 windows 形式,因为 System.IO.File 的文档没有说它支持 Windows Phone。我的问题始于 ReadAllBytes。它说 'System.IO.File' does not contain a definition for 'ReadAllBytes'。那么,我该如何读取所有字节?

有什么想法吗?谢谢。

如果您需要在 API 中传递 MemoryStream,如下面的代码行,

FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");

那你为什么要转换成 byte[] ..?您可以像这样直接将文件转换为 MemoryStream:

var a = System.IO.File.OpenRead("document.txt");
System.IO.MemoryStream stream = new System.IO.MemoryStream();
a.CopyTo(stream);

然后直接传stream作为参数就可以了

FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
request.Upload();

Google.Apis.Drive.v2.Data.File file = request.ResponseBody;

现在,我的建议是不要在 windows phone 8 中使用 System.IO.File,而是使用 Windows.Storage.StorageFile,它包含正确执行操作文件的操作,无论文件是否在InstalledLocationIsolatedStorage

编辑:-

有关您的更多信息,以下是如何将文件读取到 MemoryStream:

        using (MemoryStream ms1 = new MemoryStream())
        {
            using (FileStream file = new FileStream("document.txt", FileMode.Open, FileAccess.Read))
            {
                byte[] bytes = new byte[file.Length];
                file.Read(bytes, 0, (int)file.Length);
                ms1.Write(bytes, 0, (int)file.Length);
            }
        }

如需更多代码,请在此处简要介绍您的场景。希望对您有所帮助。

Windows Phone(和商店应用程序)使用存储文件,因此您必须使用不同于 System.IO 的 API。拥有 StorageFile 后,System.IO 命名空间中有扩展方法,可将 StorageFile 的 IRandomAccessStream 转换为所有示例使用的标准 Stream。此处的示例代码使用 OpenStreamForReadAsync 来获取 Stream。然后你可以获取字节,或者直接使用流。

var file = await ApplicationData.Current.LocalFolder.GetFileAsync("sample.txt");
using (var stream = await file.OpenStreamForReadAsync())
{
    //ideally just copy this stream to the the request stream
    //or use an HttpClient and request with StreamContent(stream).

    //if you need the bytes, you can do this
    var buffer = new byte[stream.Length];
    await stream.ReadAsync(buffer, 0, buffer.Length);
 }