无法将类型'System.IO.Stream'隐式转换为'Java.IO.InputStream'

时间:2012-03-28 11:54:48

标签: c# android xamarin.android java-io .net

我在SO上提到了一些类似的问题,但没有一个涉及IO

当我使用Eclipse时,我在java中使用了相同的代码。那个时候它起作用了。

但是现在我尝试在Mono for Android(C#)中使用此代码,它不起作用。

我正在尝试运行此代码来创建InputStream

InputStream myInput =ctx.Assets.Open(DATABASE_NAME + ".db");

但它给了我编译时错误:Cannot implicitly convert type 'System.IO.Stream' to 'Java.IO.InputStream'

可以直接将文件从资源复制到设备内存,但需要源路径和目标路径。

如何获取源路径

由于我是Mono for Android的绝对新手,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:8)

Mono for Android将一些Java构造转换为“等效的”.NET构造,以简化类.NET平台之间的代码共享。作为其中一部分,java.io.InputStreamjava.io.OutputStream被映射到System.IO.Stream,因此编译器错误。

InputStreamSystem.IO.Stream上不存在InputStream所需的任何内容吗?

  

可以直接将文件从资源复制到设备内存,但需要源路径和目标路径。

我不知道你在这里指的是Stream.CopyTo(Stream)方法。您可以使用Stream asset = context.Assets.Open(DATABASE_NAME + ".db"); string dbPath = System.IO.Path.Combine( System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "YourFile.xml"); using (var dest = System.IO.File.OpenWrite(destPath)) asset.CopyTo(dest); 执行此操作:

{{1}}

答案 1 :(得分:0)

您正在尝试将System.IO.Stream转换为Java.IO.InputStream,这是不允许的。两者都是不同的环境。

您要在此处实现的目标可以使用System.IO.Stream完成,因此无需进行转换!

            System.IO.Stream input = context.Assets.Open(FILENAME);
            Java.IO.FileOutputStream output = new Java.IO.FileOutputStream(file);
            byte[] buffer = new byte[1024];
            int size;
            while ((size = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                output.Write(buffer, 0, size);
            }
            input.Close();
            output.Close();