2012-06-30 64 views
0

我一直在爲公司的網站開發一個Silverlight應用程序,並且遇到了問題。來自Uri的C#Silverlight - XmlDictionary

到目前爲止,我一直在本地進行編程,現在我需要將該程序發佈到網站上;問題是FileStream只能使用提升的權限訪問本地文件。

下面是一個代碼片段:

using (FileStream fileStream = new FileStream(@"E:\Users\LUPUS\Documents\Visual Studio 2010\Projects\Lycaon5\Lycaon5\acids.xdb", FileMode.Open)) 
{ 
using (XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fileStream, XmlDictionaryReaderQuotas.Max)) 
    { 
    //Read the XML file out. 
    } 
} 

在不改變任何與XmlDictionaryReader讀者 - 我怎麼能去從一個相對URI讀取文件?

很多謝謝,

Rob。

P.s.對缺乏格式的道歉,我洞穴的人,我不知道如何。

+1

下一次:[如何格式化](http://stackoverflow.com/editing-help) – Adam

回答

1

編譯時將文件與您的程序集一起嵌入。然後,你可以把它讀作一個資源流:http://msdn.microsoft.com/en-us/library/cc296240%28VS.95%29.aspx

(請確保您嵌入您的文件作爲Resource類型,此方法才能正常工作)

您的代碼可能看起來像這樣得到的文件流:

Uri uri = new Uri("/MyAssemblyName;component/acids.xdb", UriKind.Relative); 
StreamResourceInfo streamInfo = Application.GetResourceStream(uri); 
Stream fileStream = streamInfo.Stream; 

using (XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fileStream, XmlDictionaryReaderQuotas.Max)) 
{ 
    //Read the XML file out. 
} 

編輯:蒂姆小號指出,這僅僅是如果數據文件是靜態的,在編譯時固定好。否則,您可以使用其他方法從網站上下載文件(如鏈接)。

+1

如果XmlDictionary是非常靜態的,這是很好的。如果應該更容易更新,您可以從URL中讀取它,也許使用WebClient,如http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/reading-files-asynchronously-using-webclient-class-in- silverlight/ –

+0

'新的StreamResourceInfo(uri)'構造函數不存在。 http://msdn.microsoft.com/en-us/library/ms602802(v=vs.95)。你的意思是'Application.GetResourceStream(uri)'? http://msdn.microsoft.com/en-us/library/ms596994(v=vs.95) –

+0

@TimS。是啊,我做了。這就是我通過複製/粘貼來編輯部分代碼所得到的結果。我總是錯過 - 複製一些東西。 ><謝謝! –