2015-10-12 1 views
15

ファイルシステム上の設定可能な場所からjpegおよびpdfファイルを読み込んでいるアプリケーションを開発しています。 現在、実行中のバージョンがWPFで実装されていますが、今は新しいWindows Universalアプリケーションに移行しようとしています。Windows 10ユニバーサルアプリケーションファイル/ディレクトリアクセス

次のコードは、WPFで正常に動作します:

public IList<string> GetFilesByNumber(string path, string number) 
    { 
     if (string.IsNullOrWhiteSpace(path)) 
      throw new ArgumentNullException(nameof(path)); 

     if (string.IsNullOrWhiteSpace(number)) 
      throw new ArgumentNullException(nameof(number)); 

     if (!Directory.Exists(path)) 
      throw new DirectoryNotFoundException(path); 

     var files = Directory.GetFiles(path, "*" + number + "*", 
      SearchOption.AllDirectories); 

     if (files == null || files.Length == 0) 
      return null; 
     return files; 
    } 

ユニバーサルアプリを使用して、私はいくつかの問題に遭遇した:

  • Directory.Existsは、私は外のディレクトリから読み取ることができますどのよう
  • 使用できません。私のアプリストレージ?

は、アプリのストレージ外の他のディレクトリから読み込むには、私は次のことを試してみました:

StorageFolder folder = StorageFolder.GetFolderFromPathAsync("D:\\texts\\"); 
var fileTypeFilter = new string[] { ".pdf", ".jpg" }; 
QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderBySearchRank, fileTypeFilter); 
queryOptions.UserSearchFilter = "142"; 
StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions); 
IReadOnlyList<StorageFile> files = queryResult.GetFilesAsync().GetResults(); 

事がある:それisn'tが働いて、私は例外を取得:

をTextManager.Universal.DataAccess.dllで 'System.UnauthorizedAccessException'タイプの例外が発生しましたが、ユーザーコード で処理されませんでした。追加情報:アクセスが拒否されました。 (HRESULTからの例外:0x80070005(E_ACCESSDENIED))

が誰かをした...私はあなたがマニフェストにいくつかの権限を設定する必要があることを知っているが、私は、ファイルシステム入出力操作に適したものを見つけるcan'tまた、そのような問題/可能な解決策がありますか?

解決策: @Rico Suterが私に与えた解決策から、私はFolderPickerと組み合わせてFutureAccessListを選択しました。また、プログラムの再起動後にトークンを使ってエントリにアクセスすることもできます。

UX GuidlinesとこのGithub sampleをお勧めします。

ありがとうございました! UWPアプリで

+0

なぜあなたのアプリのストレージ外のディレクトリから読み込みたいですか?理由のためにサンドボックスが存在します。 –

+0

ファイルを簡単に変更できます。つまり、サンドボックス化のために方法はありません。 – WhiteIntel

答えて

36

、あなただけの、次のファイルとフォルダにアクセスすることができます手動でmanifest file(例えば文書、写真、ビデオフォルダ)

  • ディレクトリとファイルユーザー内で宣言されている

    D:\のすべてのファイルにアクセスする必要がある場合、ユーザーは手動でFolderPickerを使用してD:\ドライブを選択する必要があります。このドライブのすべてにアクセスできます。

  • +0

    ほぼ同じ回答を投稿しようとしていました。また、図書館やリムーバブルストレージへのアクセスを宣言する必要があることをマニフェストで宣言する必要があります。あなたはその方法でほとんどの写真にアクセスすることができます。 – Barptad

    +0

    フォルダを一度選択し、パスを再利用するために返された値を設定ファイルに保存できますか? – WhiteIntel

    +2

    私はあなたが一度フォルダを選択してFutureAccessListに入れておくと、後でいつでもアクセスできるようになると思います... –

    0

    MSDN docによると、「ファイルピッカーを使用すると、ファイルやフォルダにアクセスしたり、ファイルやフォルダを添付したり、ファイルを開いたり、ファイルを保存したりすることができます。

    https://msdn.microsoft.com/en-us/library/windows/apps/hh465182.aspx

    あなたは、標準的なユーザインタフェースを介してfilepickerを使用してファイルを読み込むことができます。

    よろしく

    0

    これは真実ではありません:ファイル拡張子の関連付けまたは メール(Outlookなど)からまたはデスクトップからファイルを開くことで、それを試し共有経由で開かれ ファイル... それは単にん動作しない まず、ファイルピッカーによって権利を付与する必要があります。 これはist sh ...