2017-12-16 33 views
0

同じソースから2つのファイルが派生しているかどうかを簡単にテストできるように、GUIDをStorageFileに関連付けることをお勧めします。uwpでSystem.CommentまたはSystem.Subjectファイルのプロパティを保存する

私は、ファイルのプロパティにGUIDを保存しようとしている:

 private static string GuidProperty = "System.Comment"; // also tried "System.Subject". 

     static public async Task<Guid> GetGuidAsync(StorageFile file) 
     { 
      var properties = await file.Properties.RetrievePropertiesAsync(new string[] { GuidProperty }); 
      if (!(properties[GuidProperty] is string guidString)) { 
       throw new InvalidOperationException("Missing GUID on file."); 
      } 
      return new Guid(guidString); 
     } 

     static public async Task InitializeGuidAsync(StorageFile file) 
     { 
      var properties = await file.Properties.RetrievePropertiesAsync(new string[] { GuidProperty }); 
      properties[GuidProperty] = Guid.NewGuid().ToString(); 
      await file.Properties.SavePropertiesAsync(properties); 
     } 

これは動作しません。 SavePropertiesAsyncに到達すると、 "COMコンポーネントへの呼び出しから返されたエラーHRESULT E_FAIL"というCOMExceptionがスローされます。

ファイルは、カスタムディレクトリ拡張子を持つappディレクトリのSQLiteデータベースです。

このファイルにGUIDを付けてタグ付けするにはどうすればよいですか?

P.S.いくつかのポーズの後に...多分問題は、カスタムファイルタイプのファイルプロパティハンドラを登録していないことです。それをどうやって行うかわからない。

+0

私は 'FileOpenPicker'でファイルを取得しようとし、' SavePropertiesAsync'を呼び出すと、それは私の側で動作します。プロパティを追加したいファイルの詳細を共有できますか? –

+0

長すぎてここに収まらない) –

+0

私は上記の私の記事を編集してファイルの種類に関する情報を追加しました。 –

答えて

1

問題は、カスタムファイルタイプがプロパティの格納をサポートしていないことです。

プロパティはファイル内に格納され、実装するプロパティハンドラを使用してWindows 10によって書き込まれ、読み込まれます。

次のページでは、Windows 10のプロパティについて説明します。https://msdn.microsoft.com/en-us/library/windows/desktop/bb776859(v=vs.85).aspx

文書フォーマットとしてのSQLiteを使用してに関しては、それはアプリのディレクトリにある場合には、残念ながら、SQLiteのファイルにのみアクセスすることができます。そのため、プロパティの読み取りや書き込みにはファイルをアプリケーションディレクトリにコピーする必要があるため、ファイルプロパティをサポートすることは非常に非効率的です。