3

説明:

以下のコードは、失敗の原因となる最も単純なコードです。また、CreateFileとMoveFileを異なるusingステートメントに配置し、それらを異なるxamlページに配置し、ファイルを新しいファイル名のサブディレクトリに移動し、同じファイル名のサブディレクトリに移動しました。それらはすべて同じ例外をスローします。CopyFileは、すべての状況で同じ例外をスローします。

質問は-私が説明していない信じられないほど単純なことは何ですか?

  1. WindowsPhone7.1を対象とした新しいSilverlightforWindowsPhone7プロジェクトを開きます。
  2. App.xaml.csを開きます。
  3. 次のコード行をApplication_Launchingに貼り付けます。

    using(IsolatedStorageFile isf = IsolateStorageFile.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

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

このコードを完全に実行する

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

私はちょうど同じ問題を抱えていましたが、解決策は簡単です
。ターゲットファイルが存在してはならず、移動する前に削除してください。削除する前に、対象ファイルがどこにも開かれていないことを確認してください。
ソース ファイルはどこでも開いてはいけません。

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

MBen、あなたの答えは正しくありません。ファイルに対して Close を呼び出しても、このエラーは修正されません。MoveFile の前に「Close」を呼び出しても、まったく同じエラーが表示されます。

編集 OK、私が抱えていた問題を突き止めました - destinationFile が既に存在するときに MoveFile を呼び出そうとすると、例外がスローされます。sourceFile を移動する前に、まず destinationFile を削除する必要があります。

于 2012-08-15T00:48:44.030 に答える