2010-11-18 9 views
1

私はVisual Studioで作業しているSilverlight 4/C#プロジェクトを持っています。私は、プロジェクト>> Add New Item >> Xml Fileを右クリックしてXMLデータファイルを作成しました。私はファイルを開こうとします:Silverlightでのファイルアクセス許可の問題

 StreamReader streamReader = new StreamReader("data.xml"); 

しかし、これはセキュリティの例外を与えます。これを回避する、または必要な権限を与えるにはどうすればよいですか?

答えて

1

StreamReaderのそのコンストラクタは、ローカルファイルシステムへのファイルパスを期待しています。これは、信頼性の高いブラウザからのみ使用できます。

代わりにあなたがApplication.GetResourceStream使用する必要があります: - :

ところで
XDocument doc = XDocument.Load(stream); 

、私は個人的に希望 - 私はあなたが本当にちょうどXDocumentでこれをしたい、あなたはこのStreamReaderを段階を迂回期待しかし

Stream stream = Application.GetResourceStream(new Uri("data.xml", UriKind.Relative)); 
StreamReader reader = new StreamReader(stream); 

をXMLをアセンブリに埋め込むのではなく、コンテンツとしてXapに残します。

2

実行時にファイルを読み取るだけでいいですか?もしそうなら、Visual Studioでリソース構築アクションを設定してから、Assembly.GetManifestResourceStreamを使って開くように設定することをお勧めします。これは、読み取り専用データをアプリケーションIMOにバンドルする最も簡単な方法です。

+0

以下のコメントを参照すると、SLはMSDNに基づいて埋め込みリソースリファレンスを受け入れません。 –

+0

@Aaron:ありがとう、編集中。 –

2

Silverlightでは、デフォルトでローカルファイルシステムにアクセスできません。あなたのオプションは:

一般的にデータを保存する必要がある場合は、可能ならばIsolatedStorageを使用してください。

+0

-1 OPは意図的にローカルディスクから読み込もうとせず、リソースとして代わりにIsolatedStorageと昇格されたアクセス権の参照が不要で、さらにSkeetの参照によってSL –

2

リソース埋め込みリソースではなく、このアイテムにマークする必要があります。 MSDNから

...

が ビルドアクション]ドロップダウンリストで、他のいくつかの値を提供するVisual Studioで[プロパティ]ウィンドウ。ただし、 Silverlightプロジェクトでは、以前の3つの 値しか使用できません。 特に、Silverlightの組み込み リソースは常にSilverlightが認識されない でき 形式を使用して、リソース ビルドアクションではなく、組み込み リソースビルドアクションを使用する必要があります。

あなたが成し遂げようとしているものは、hereです。ディスク上のファイルにアクセスするのではなく、リソースとしてアクセスしようとしているので、これは問題ではありません。隔離された記憶域も昇格されたアクセス許可はここでは関連しています。

+0

Hmmには無効な組み込みリソースになります。 ..奇妙な。それはWP7で動作します。これは、私がSLの持つすべての直接の経験です。それはまだSL4で壊れていますか? –

+0

@Jon SL4で試したことはありませんが、SLの他のバージョンは...現時点ではドキュメントを外すことしかできません。 –