IsolatedStorageFile的MoveFile()方法抛出IsolatedStorageException

时间:2012-07-08 19:22:58

标签: c# windows-phone-7 isolatedstorage isolatedstoragefile

描述:

下面的代码是我能写的最简单的代码,导致失败。我也尝试过:将CreateFile和MoveFile放在不同的using语句中,将它们放在不同的xaml页面中,将文件移动到具有新文件名的子目录中,将其移动到具有相同文件名的子目录中。他们都抛出同样的例外。 CopyFile会在所有情况下抛出相同的异常。

问题是 - 我没有考虑到什么非常简单的事情?

  1. 打开一个针对Windows Phone 7.1的新版Silverlight for Windows Phone 7项目。
  2. 打开App.xaml.cs。
  3. 将以下代码行粘贴到Application_Launching:

    using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        isf.CreateFile("hello.txt");
        isf.MoveFile("hello.txt", "hi.txt");
    }
  4. 点击开始调试,定位模拟器或设备。

  5. 预期:创建一个名为" hello.txt"的文件,然后(有效地)重命名" hello.txt"到" hi.txt"。
    实际:在下面抛出异常。

    System.IO.IsolatedStorage.IsolatedStorageException was unhandled
      Message=An error occurred while accessing IsolatedStorage.
      StackTrace:
           at System.IO.IsolatedStorage.IsolatedStorageFile.MoveFile(String sourceFileName, String destinationFileName)
           at PhoneApp4.App.Application_Launching(Object sender, LaunchingEventArgs e)
           at Microsoft.Phone.Shell.PhoneApplicationService.FireLaunching()
           at Microsoft.Phone.Execution.NativeEmInterop.FireOnLaunching()
    

4 个答案:

答案 0 :(得分:1)

创建文件后,您应该致电Close

IsolatedStorageFileStream helloFile = store.CreateFile("hello.txt");
helloFile.Close();
isf.MoveFile("hello.txt", "hi.txt");

答案 1 :(得分:1)

我只是遇到了同样的问题,但解决方案很简单:
目标文件必须不存在,在移动之前将其删除。在删除之前,请确保目标文件未在任何位置打开 源文件不能在任何地方打开。

if (_isolatedStorage.FileExists(targetPath))
{
    _isolatedStorage.DeleteFile(targetPath);
}
_isolatedStorage.MoveFile(sourcePath, targetPath);

答案 2 :(得分:1)

完美执行这段代码

  var file = await ApplicationData.Current.LocalFolder.GetFileAsync(oldName);
  await file.RenameAsync(newName);

答案 3 :(得分:0)

MBen,你的答案不正确。在文件上调用Close不会修复此错误。即使我在MoveFile之前调用“Close”,我也会看到完全相同的错误。

编辑好了我刚刚发现我遇到的问题 - 如果你在destinationFile已经存在时尝试调用MoveFile,它会抛出异常。在将sourceFile移动到它之前,您必须先删除destinationFile。