【问题标题】:Get byte array from Java.IO.File variable in xamarin android从 xamarin android 中的 Java.IO.File 变量获取字节数组
【发布时间】:2017-08-15 18:47:38
【问题描述】:

我正在创建一个 xamarin 表单应用程序,它允许用户从外部存储中选择多个音频文件。我在选择多个文件方面取得了成功,但是每当我尝试读取文件内容时,它都会给我一个异常“System.IO.DirectoryNotFoundException”。我正在使用以下方法从音频文件中读取字节:

private byte[] GetPathToAudioFile(global::Android.Net.Uri uri)
    {
        byte[] byteArray = null;
        try
        {
            File file = new Java.IO.File(uri.ToString());

            string filePath = System.IO.Path.GetFullPath(file.Path);

            byteArray = System.IO.File.ReadAllBytes(filePath);
        }
        catch (Exception ex)
        {

        }
        return byteArray;
    }

它总是给我错误。请帮助我,以便我可以将文件内容读取为字节数组。提前致谢。

【问题讨论】:

  • 您有外部存储访问权限吗?看看 PCL 存储为您处理事情。
  • 我不知道该怎么做。我是 xamarin 开发的新手。我无法从 PCL 中选择多个项目,因此我实现了渲染器,并且在使用 MessagingCenter 为我处理事情时,我需要从该渲染器以字节数组的形式发回数据。
  • 它不工作。
  • “路径”的值是什么,它只是目录吗? developer.xamarin.com/api/type/Java.IO.FileOutputStream

标签: android xamarin.android xamarin.forms java-io


【解决方案1】:

每当我尝试读取文件内容时,都会出现“System.IO.DirectoryNotFoundException”异常

问题是当你使用uri.ToString()方法获取文件路径时,格式不对。结果,当系统使用这个路径搜索文件时,它会告诉你DirectoryNotFoundException,其实文件路径不存在。

例如,当您使用uri.ToString() 时,您的文件路径如下所示:

Path == /file:/storage/emulated/0/netease/cloudmusic/Music/love.MP3
//Not valid

解决方案:

改用uri.Path,用法如下:

byteArray = System.IO.File.ReadAllBytes(uri.Path);

其文件路径:

 uri.Path == /storage/emulated/0/netease/cloudmusic/Music/love.MP3

现在,它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多