2012-03-02 3 views
5

Я пытался реализовать этот пример, используя C# и Monodroid, но у меня возникают трудности чтения и записи файлов Asset:Как читать Asset файлы с помощью VS & 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); 

Это правильное пространство имен?

Во-вторых, мой файл активов отмечен как AndroidAsset и «Копировать всегда» в «Свойства» панели VS, но мои попытки прочитать файл всегда терпит неудачу (файл не найден), используя эту инструкцию:

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

У меня есть настройки VS не так, чтобы файл актива не копировался на эмулятор или он копируется ОК, но мой код, чтобы открыть/прочитать это неправильно?

+0

Не забудьте установить действие сборки для файла актива в свойствах VS: BuildAction: AndroidAsset – AndyM

ответ

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 от Activities или Contexts.

Например: Activity класс имеет свойство Assets. Это то, что вы используете. ИЛИ вы используете View 's Context.Assets.

+0

Спасибо, отлично работает. –

-4

Или просто добавить в верхней части:

использованием System.IO;

и он будет работать.

Команда Xamarin забывает иногда упоминать using.