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を持っていないので、プロジェクトアセットではなくAndroidAndroid.Content.Res.Resources.System.Assetsアセットを参照します。プロジェクトアセットを使用したいので、またはからを使用する必要があります。AssetManagerActivitiesContexts

例:Activityクラスには。というプロパティがありますAssets。これはあなたが使用するものです。または、View'sContext.Assetsプロパティを使用します。

于 2012-03-02T22:43:38.350 に答える
-4

または、単純に先頭に次を追加します。

System.IO の使用;

そしてそれはうまくいくでしょう。

Xamarin チームは時々、言及するのを忘れusingます。

于 2012-10-27T20:33:49.173 に答える