Я пытаюсь разработать приложение для чтения RSS и хочу кэшировать свой RSS-канал. Что я собираюсь сделать, так это создать XML-файл в изолированном хранилище, используя фид, загруженный по URL-адресу. Вот что я сделал до сих пор.
// 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-файла. Когда я проверяю наличие файла, он там. Но я не могу читать оттуда. Может ли кто-нибудь сказать мне решение для этого. Любая помощь будет оценена по достоинству. Спасибо.
Обновлено: я обновил приведенный выше код и не получил никаких ошибок.