3

描述:

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

问题是——我没有考虑到什么难以置信的简单事情?

  1. 打开面向 Windows Phone 7.1 的新 Silverlight for Windows Phone 7 项目。
  2. 打开 App.xaml.cs。
  3. 将以下代码行粘贴到 Application_Launching 中:

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

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

System.IO.IsolatedStorage.IsolatedStorageException 未处理
  消息=访问独立存储时发生错误。
  堆栈跟踪:
       在 System.IO.IsolatedStorage.IsolatedStorageFile.MoveFile(字符串源文件名,字符串目标文件名)
       在 PhoneApp4.App.Application_Launching(对象发送者,LaunchingEventArgs e)
       在 Microsoft.Phone.Shell.PhoneApplicationService.FireLaunching()
       在 Microsoft.Phone.Execution.NativeEmInterop.FireOnLaunching()
4

4 回答 4

1

您应该Close在创建文件后调用。

IsolatedStorageFileStream helloFile = store.CreateFile("hello.txt");
helloFile.Close();
isf.MoveFile("hello.txt", "hi.txt");
于 2012-07-08T19:36:10.687 回答
1

我只是遇到了同样的问题,但解决方案很简单:
目标文件一定不存在,在移动之前将其删除。在删除之前确保目标文件没有在任何地方打开。
源文件不得在任何地方打开。

if (_isolatedStorage.FileExists(targetPath))
{
    _isolatedStorage.DeleteFile(targetPath);
}
_isolatedStorage.MoveFile(sourcePath, targetPath);
于 2012-10-22T09:05:30.347 回答
1

完美执行这段代码

  var file = await ApplicationData.Current.LocalFolder.GetFileAsync(oldName);
  await file.RenameAsync(newName);
于 2014-09-15T11:15:06.847 回答
0

MBen,您的答案不正确。对文件调用 Close 并不能修复此错误。即使我在 MoveFile 之前调用“关闭”,我也看到了完全相同的错误。

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

于 2012-08-15T00:48:44.030 回答