Метод MoveFile () IsolatedStorageFile вызывает исключение IsolatedStorageException
Описание:
Код ниже - самый простой код, который я мог написать, который вызывает ошибку. Я также пытался: поместить CreateFile и MoveFile в разные операторы использования, поместить их на разные страницы xaml, переместить файл в подкаталог с новым именем файла, переместить его в подкаталог с тем же именем файла. Все они бросают одно и то же исключение. CopyFile создает одно и то же исключение при любых обстоятельствах.
Вопрос в том, что за невероятно простую вещь я не рассматриваю?
- Откройте новый проект Silverlight для Windows Phone 7, ориентированный на Windows Phone 7.1.
- Откройте App.xaml.cs.
Вставьте следующие строки кода в 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 не было обработано Сообщение = Произошла ошибка при доступе к IsolatedStorage. Трассировки стека: в System.IO.IsolatedStorage.IsolatedStorageFile.MoveFile(String sourceFileName, String destinationFileName) на PhoneApp4.App.Application_Launching(Отправитель объекта, LaunchingEventArgs e) в Microsoft.Phone.Shell.PhoneApplicationService.FireLaunching() в Microsoft.Phone.Execution.NativeEmInterop.FireOnLaunching()
4 ответа
Вам следует позвонить Close
после создания файла.
IsolatedStorageFileStream helloFile = store.CreateFile("hello.txt");
helloFile.Close();
isf.MoveFile("hello.txt", "hi.txt");
Отлично выполнить этот кусок кода
var file = await ApplicationData.Current.LocalFolder.GetFileAsync(oldName);
await file.RenameAsync(newName);
У меня просто была та же проблема, но решение простое:
Целевой файл не должен существовать, удалите его перед перемещением. Убедитесь, что целевой файл нигде не открыт перед удалением.
Исходный файл нигде не должен быть открыт.
if (_isolatedStorage.FileExists(targetPath))
{
_isolatedStorage.DeleteFile(targetPath);
}
_isolatedStorage.MoveFile(sourcePath, targetPath);
MBen, ваш ответ не правильный. Вызов Close для файла не исправляет эту ошибку. Я вижу точно такую же ошибку, хотя я вызываю "Закрыть" перед MoveFile.
edit Хорошо, только что выяснил проблему, с которой я столкнулся - если вы попытаетесь вызвать MoveFile, когда файл destinationFile уже существует, он выдаст исключение. Вы должны сначала удалить файл назначения перед тем, как переместить в него исходный файл.