RSS リーダー アプリケーションを開発しようとしており、RSS フィードをキャッシュしたいと考えています。これから行うことは、URL ロード フィードを使用して分離ストレージに XML ファイルを作成することです。これが私がこれまでに行ったことです。
// Constructor
public MainPage()
{
InitializeComponent();
using (IsolatedStorageFile isstorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isstorage.FileExists(rssCacheFile))
{
MessageBox.Show("Reading from cache");
readCache(rssCacheFile);
}
else
{
MessageBox.Show("Reading from web");
readFeed(rssLink);
}
}
}
public void readFeed(string link)
{
WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri(link, UriKind.Absolute));
}
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
Stream rssStream = e.Result;
XmlReader response = XmlReader.Create(rssStream);
SyndicationFeed feeds = SyndicationFeed.Load(response);
foreach (SyndicationItem f in feeds.Items)
{
itemList.Add(new RssItem {Title = f.Title.Text });
}
listBox1.ItemsSource = itemList;
//Write to the cache
writeXML(rssStream);
}
public void writeXML(Stream rssStream)
{
using (IsolatedStorageFile isstorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isstream = new IsolatedStorageFileStream(rssCacheFile, FileMode.Create, FileAccess.Write, isstorage))
{
byte[] buffer = new byte[rssStream.Length];
while (rssStream.Read(buffer, 0, buffer.Length) > 0)
{
isstream.Write(buffer, 0, buffer.Length);
}
isstream.Flush();
System.Threading.Thread.Sleep(0);
}
}
}
public void readCache(string fileName)
{
//IsolatedStorageFile isstorage = IsolatedStorageFile.GetUserStoreForApplication();
using (IsolatedStorageFile isstorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isstorage.FileExists(fileName))
{
try
{
using (isstorage)
{
IsolatedStorageFileStream stream = isstorage.OpenFile(fileName, FileMode.Open, FileAccess.Read);
using (StreamReader reader = new StreamReader(stream))
{
rssXml.Text = reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
MessageBox.Show("Cache is empty....");
}
}
}
しかし、問題は、書き込まれた XML ファイルから読み取ることができないことです。ファイルの存在を確認すると、そこにあります。しかし、私はそれを読むことができません。誰でもこれの解決策を教えてもらえますか。どんな助けでも大歓迎です。ありがとう。
更新: 上記のコードを更新しましたが、エラーは発生しません。