0

うわー、この方法は必要以上に複雑です。次のコードが機能する理由を誰かが私に説明できますか?

       string stringToWrite = "SomeStuff";
        Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current;
        Windows.Storage.StorageFolder installedLocation = package.InstalledLocation;
        var files = await installedLocation.GetFilesAsync();
        foreach (Windows.Storage.StorageFile sf in files)
        {
            if (sf.Name.Equals("log.txt"))
            {
                await FileIO.AppendTextAsync(sf, stringToWrite);

            }
        }

それでも、AccessDeniedでは次のことが失敗します。

      Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current;
      Windows.Storage.StorageFolder installedLocation = package.InstalledLocation;
      var log = await installedLocation.GetFileAsync("log.txt");
      await FileIO.AppendTextAsync(log, stringToWrite);

唯一の違いは、GetFilesAsyncメソッドによって返されるファイルをループすることと、ファイルを名前で取得することです。ちなみに、GetFileAsyncでlog.txtのスペルを間違えると例外が発生するため、ファイルを名前で取得することはできます。

とても紛らわしい....

4

1 に答える 1

1

インストール場所を使用してファイルを書き込むべきではありません。MSDN: File Access/Permissions in Windows Store Appsに従って読み取り専用であることが想定されています。

アプリのインストール ディレクトリは読み取り専用の場所です。ファイル ピッカーを使用してインストール ディレクトリにアクセスすることはできません。

LocalRoaming、またはTemporary保管場所のいずれかを使用する必要があります。

このリンクを参照してください: MSDN: Quickstart Local Application Data

于 2013-01-21T19:15:35.290 に答える