5

我一直在尝试使用 C# 和 Monodroid 来实现这个示例,但是在读取和写入资产文件时遇到了困难:

http://docs.xamarin.com/android/advanced_topics/using_android_assets

我使用的是模拟器,而不是设备。

首先,我无法找到 Assets.Open 的命名空间。我最终发现的是

const string lfn  = MyAssetFile.txt;
System.IO.StreamReader(Android.Content.Res.Resources.System.Assets.Open(lfn);

这是正确的命名空间吗?

其次,我的资产文件在 VS“属性”窗格中被标记为 AndroidAsset 和“始终复制”,但我使用以下语句读取文件的尝试总是失败(未找到文件):

string  settings = "";
using (StreamReader sr = new System.IO.StreamReader (Android.Content.Res.Resources.System.Assets.Open(lfn))) settings   =   sr.ReadToEnd();

我的 VS 设置是否错误,以至于资产文件没有被复制到模拟器上,或者它被复制好但我打开/读取它的代码是错误的?

4

2 回答 2

9

您必须使用:

const string lfn = "MyAssetFile.txt";
string settings = string.Empty;

// context could be ApplicationContext, Activity or
// any other object of type Context
using (var input = context.Assets.Open(lfn))
using (StreamReader sr = new System.IO.StreamReader(input))
{
    settings = sr.ReadToEnd();
}

如果我没记错的话,因为我目前还没有 IDE,所以Android.Content.Res.Resources.System.Assets引用的是Android资产而不是您的项目资产。您想使用您的项目资产,因此您需要使用AssetManager来自您的ActivitiesContexts.

例如:Activity该类有一个名为Assets. 这就是你使用的。或者您使用 aViewContext.Assets属性。

于 2012-03-02T22:43:38.350 回答
-4

或者只是简单地在顶部添加:

使用 System.IO;

它会起作用。

Xamarin 团队有时会忘记提及的using东西。

于 2012-10-27T20:33:49.173 回答