2016-04-17 116 views
0

XmlファイルをAssetsフォルダに保存し、例外を与えるxmlファイルへの変更を保存しようとすると、ビルドアクションをAndroidアセットに設定するようになりました。System.UnauthorizedAccessException: Q317664.xmlは、」この例外が発生している理由denied.iあなたはxmlファイルをxamarinに読み込む方法android

次にあなたにXMLをロードすることができXamarinのAndroidプロジェクトの資産フォルダにXMLファイルを追加する必要が私に

using System; 
using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using System.IO; 
using System.Reflection; 
using Android.Content.Res; 
using System.Xml; 
using System.Xml.Linq; 
using System.Xml.XPath; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
namespace App17 
{ 
[Activity(Label = "App17", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    int count = 1; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 

     // Get our button from the layout resource, 
     // and attach an event to it 
     var xml = XDocument.Load(Assets.Open("Q317664.xml")); 
     var node = xml.Descendants("Book").FirstOrDefault(cd => cd.Attribute("Id").Value == "1"); 
     node.SetAttributeValue("ISBN", "new"); 
     xml.Save("Q317664.xml"); 
    // Button button = FindViewById<Button>(Resource.Id.MyButton); 

     // button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); }; 
    } 
} 
} 

答えて

0

を助けてくださいわからないですこのような変数

var xml = XDocument.Load(Assets.Open("data.xml")); 
+0

xmlファイルをAssetsフォルダに配置するようになりました。 urring エラー1無効なリソースディレクトリ名: "res assets"。 \t c:¥users¥asad¥documents¥visual studio 2013¥Projects¥App17¥App17¥aapt.exe App17 –

+0

xmlファイルの名前は何ですか? – Sreeraj

+0

属性値を変更した後にXMLファイルを保存しようとすると、ビルドアクションをアンドロイドアセットに設定して問題を解決しました。System.UnauthorizedAccessException:パス "/Q317664.xml"へのアクセスが拒否されました。なぜこの例外が発生しているのかわからない –

1

アプリケーションバンドル内のAssetsディレクトリは読み取り専用です。開いているQ317664.xml xmlドキュメントに書き込むことはできません。これがSystem.UnauthorizedAccessExceptionの原因です。

あなたは、資産ディレクトリにバンドルされて何かを修正する書き込み可能な場所に解凍して、そのコピーを操作したい場合:

string fileName = "Q317664.xml"; 
string filePath = Path.Combine (Android.OS.Environment.ExternalStorageDirectory.ToString(), fileName); 
// Check if your xml file has already been extracted. 
if (!File.Exists(filePath)) 
{ 
    using (BinaryReader br = new BinaryReader(Assets.Open(fileName))) 
    { 
     using (BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.Create))) 
     { 
      byte[] buffer = new byte[2048]; 
      int len = 0; 
      while ((len = br.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       bw.Write (buffer, 0, len); 
      } 
     } 
    } 
} 

// Operate on the external file 
var xml = XDocument.Load(filePath); 
var node = xml.Descendants("Book").FirstOrDefault(cd => cd.Attribute("Id").Value == "1"); 
node.SetAttributeValue("ISBN", "new"); 
xml.Save("Q317664.xml"); 

参照:

関連する問題