IsolatedStorageFileStream异常不允许操作

时间:2013-03-14 14:58:19

标签: c# windows-phone-8

好的,我已经搜索并尝试了所有可能的解决方案,但仍然是抛出异常。任何帮助都会很棒。

public void SaveOrReplace(string fileContent)
        {
            using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (!storage.DirectoryExists("FX"))
                    storage.CreateDirectory("FX");

                if (storage.FileExists(FilePath))
                    storage.DeleteFile(FilePath);

                //when I debug, it code does not get past here
                // when I remove this first using no exception, but of course I can't write some text to the file
                using (IsolatedStorageFileStream fileStream = storage.CreateFile(FilePath))
                {
                    using (StreamWriter writer = new StreamWriter(fileStream))
                    {
                        writer.Write(fileContent);
                        fileStream.Dispose();
                    }
                }

            }
        }

堆栈跟踪以获取您的信息。

   at System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, IsolatedStorageFile isf)
   at System.IO.IsolatedStorage.IsolatedStorageFile.CreateFile(String path)
   at FXNews.Models.FFNewsProvider.SaveOrReplace(String fileContent)
   at FXNews.Models.FFNewsProvider.<Load>d__b.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at FXNews.Models.FFNewsProvider.<GetNewsCollection>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at FXNews.ViewModels.PivotPageViewModel.<GetAllNews>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at FXNews.Views.PivotPage.<OnNavigatedTo>d__2.MoveNext()

在这种情况下,我做错了什么?

1 个答案:

答案 0 :(得分:0)

好的,在随机摆弄代码后,我设法做到了。说实话,我不确定它背后的原因,但它确实有效。

public void SaveOrReplace(string fileContent)
{
    using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!storage.DirectoryExists("FX"))
            storage.CreateDirectory("FX");

        if (storage.FileExists(FilePath))
            storage.DeleteFile(FilePath);

        using (IsolatedStorageFileStream fileStream = storage.OpenFile(FilePath, FileMode.CreateNew, FileAccess.Write, FileShare.Read))
        {
            using (StreamWriter writer = new StreamWriter(fileStream))
            {
                writer.Write(fileContent);
                writer.Dispose();
            }
            fileStream.Dispose();
        }

    }
}

我改变了FilePath

private const string FilePath = "FX/ffcal.xml"; // does not work, throw a different exception after I did above changes
private const string FilePath = "FX/ffcal.txt"; // this works fine, save the xml in txt and parse it. It works okay