Метод MoveFile () IsolatedStorageFile вызывает исключение IsolatedStorageException

Описание:

Код ниже - самый простой код, который я мог написать, который вызывает ошибку. Я также пытался: поместить CreateFile и MoveFile в разные операторы использования, поместить их на разные страницы xaml, переместить файл в подкаталог с новым именем файла, переместить его в подкаталог с тем же именем файла. Все они бросают одно и то же исключение. CopyFile создает одно и то же исключение при любых обстоятельствах.

Вопрос в том, что за невероятно простую вещь я не рассматриваю?

  1. Откройте новый проект Silverlight для Windows Phone 7, ориентированный на Windows Phone 7.1.
  2. Откройте App.xaml.cs.
  3. Вставьте следующие строки кода в Application_Launching:

    using (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 не было обработано
  Сообщение = Произошла ошибка при доступе к 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 уже существует, он выдаст исключение. Вы должны сначала удалить файл назначения перед тем, как переместить в него исходный файл.

Другие вопросы по тегам