我在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
的绝对新手,任何帮助都会受到赞赏。
答案 0 :(得分:8)
Mono for Android将一些Java构造转换为“等效的”.NET构造,以简化类.NET平台之间的代码共享。作为其中一部分,java.io.InputStream
和java.io.OutputStream
被映射到System.IO.Stream
,因此编译器错误。
InputStream
上System.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();