描述:
下面的代码是我能写的最简单的代码,导致失败。我也尝试过:将CreateFile和MoveFile放在不同的using语句中,将它们放在不同的xaml页面中,将文件移动到具有新文件名的子目录中,将其移动到具有相同文件名的子目录中。他们都抛出同样的例外。 CopyFile会在所有情况下抛出相同的异常。
问题是 - 我没有考虑到什么非常简单的事情?
将以下代码行粘贴到Application_Launching:
中using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { isf.CreateFile("hello.txt"); isf.MoveFile("hello.txt", "hi.txt"); }
点击开始调试,定位模拟器或设备。
预期:创建一个名为" 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()
答案 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。