0

インターネットから XML ファイルを読み込んでいます。私はそれを分離ストレージに書き込んでおり、その後それを読むのが好きです。コードは次のとおりです

  IsolatedStorageFile isf=IsolatedStorageFile.GetUserStoreForApplication();
    private void findNearestButton_Click(object sender, RoutedEventArgs e)
    {

        findCity(isf);
    }

  private void findCity(IsolatedStorageFile isf)
    {
       filePath = AppResource.exchangeOfficesFile;

            if (!isf.FileExists(filePath.ToString()))
            {
                takeXMLOnLine(isf,filePath);
            }
            parseXMLfile(isf,filePath);

    }



 private void takeXMLOnLine(IsolatedStorageFile isf, string filePath)
    {
        System.Uri targetUri = new System.Uri(AppResource.exchangeOfficesURI);
        WebClient client = new WebClient();
        client.DownloadStringAsync(targetUri);
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);

    }



void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        using (IsolatedStorageFileStream rawStream = isf.OpenFile(filePath, FileMode.Create))
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.ConformanceLevel = ConformanceLevel.Auto;
            using (XmlWriter writer = XmlWriter.Create(rawStream, settings))
            {
                string xmlResponse = e.Result.ToString();
                xmlResponse = xmlResponse.Replace("&lt;", "<");
                xmlResponse = xmlResponse.Replace("&gt;", ">");
                writer.WriteString(xmlResponse);
                // Write the XML to the file.
                writer.Flush();
            }

        }
    }


 private void parseXMLfile(IsolatedStorageFile isf, string filePath)
    {

            using (IsolatedStorageFileStream str = isf.OpenFile(filePath, FileMode.Open, FileAccess.Read))
            {
                StreamReader reader = new StreamReader(str);
                string line;


                while ((line = reader.ReadLine()) != null)
                {

                    MessageBox.Show(line);


                }
                reader.Close();
            }

}

コードを実行すると、この行で Operation not allow on IsolatedStoreageFileStream エラーが発生します

  using (IsolatedStorageFileStream str = isf.OpenFile(filePath, FileMode.Open, FileAccess.Read))

誰か助けてくれませんか?

4

3 に答える 3

0

次のようなことを試してください:

using (IsolatedStorageFile rootStore = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream fs = new IsolatedStorageFileStream(filePath,
                    System.IO.FileMode.Open, rootStore))
    {
        ... whatever you do with the file goes here
    }
}
于 2012-06-09T00:58:15.720 に答える
0

ファイルを読み込もうとすると、ファイルは存在しますか? ファイルが存在しない場合は、ダウンロード プロセスを開始し (ただし、完了を待たずに)、それを読み取ろうとするようです。

代わりに、次のようなものです。

private void findCity(IsolatedStorageFile isf)
{
    filePath = AppResource.exchangeOfficesFile;

    if (!isf.FileExists(filePath.ToString()))
    {
        takeXMLOnLine(isf,filePath);
    }
    else
    {
        parseXMLfile(isf,filePath);
    }
}

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    using (IsolatedStorageFileStream rawStream = isf.OpenFile(filePath, FileMode.Create))
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.ConformanceLevel = ConformanceLevel.Auto;
        using (XmlWriter writer = XmlWriter.Create(rawStream, settings))
        {
            string xmlResponse = e.Result.ToString();
            xmlResponse = xmlResponse.Replace("&lt;", "<");
            xmlResponse = xmlResponse.Replace("&gt;", ">");
            writer.WriteString(xmlResponse);
            // Write the XML to the file.
            writer.Flush();
        }
    }

    parseXMLfile(isf,filePath);
}
于 2012-06-10T15:44:44.557 に答える
0

ファイル パスにサブ ディレクトリがある場合は、そのディレクトリが存在するかどうかを確認します。それがこの問題を引き起こす可能性があります。

于 2012-06-09T01:34:08.260 に答える