2016-06-12 15 views
3

UWPアプリケーションを使用してローカルハードドライブ(サブフォルダを含む)の一部のフォルダからすべての画像ファイルを読み込みたいとします。その後、私は「UWPがFolderPicker経由でハードドライブからフォルダにアクセスできない

public async static Task<bool> IsContainImageFiles(string path) 
    { 
     StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(path); 
     IReadOnlyList<StorageFile> temp= await folder.GetFilesAsync(); 
     foreach (StorageFile sf in temp) 
     { 
      if (sf.ContentType == "jpg") 
       return true; 
     } 
     return false; 
    } 

と:成功した私は、フォルダにアクセスしようとしているフォルダのパスを取得した後

public async static Task<string> GetFolderPathFromTheUser() 
    { 
     FolderPicker folderPicker = new FolderPicker(); 
     folderPicker.ViewMode = PickerViewMode.Thumbnail; 
     folderPicker.FileTypeFilter.Add("."); 
     var folder = await folderPicker.PickSingleFolderAsync(); 
     return folder.Path; 
    } 

:ユーザーが希望のフォルダを選ぶことができるようにFolderPickerで始まる

イム次の例外が発生する:

mscorlib.niで 'System.UnauthorizedAccessException'タイプの例外が発生しました。 dllがユーザーコードで処理されませんでした WinRT情報:指定されたファイルまたはフォルダ(D:\ test)にアクセスできません。アイテムは、アプリケーションがアクセスできる場所(アプリケーションデータフォルダ、機能を介してアクセス可能なフォルダ、StorageApplicationPermissionsリストの永続アイテムを含む)にありません。ファイルにシステム属性または隠しファイル属性が設定されていないことを確認します。

どうすればフォルダからファイルを読み取ることができますか?

ありがとうございました。

+0

だから、あなたは*「確認しましたそのファイルにシステム属性または隠しファイル属性がマークされていないことを確認します。あなたのアプリケーションの完全性レベルと認可を受けてパスがアクセス可能であることを確認しましたか? – IInspectable

+0

関連情報:[ファイルアクセス許可](https://msdn.microsoft.com/en-us/windows/uwp/files/file-access-permissions)。 – IInspectable

答えて

3

ファイルピッカーからフォルダを取得すると、そのパスでフォルダにアクセスできなくなることがあります。あなたは直接StorageFolderインスタンスが返さ使用する必要があります。

public async static Task<IStorageFolder> GetFolderPathFromTheUser() 
{ 
    FolderPicker folderPicker = new FolderPicker(); 
    folderPicker.ViewMode = PickerViewMode.Thumbnail; 
    folderPicker.FileTypeFilter.Add("."); 
    var folder = await folderPicker.PickSingleFolderAsync(); 
    return folder; 
} 

public async static Task<bool> IsContainImageFiles(IStorageFolder folder) 
{ 
    IReadOnlyList<StorageFile> temp= await folder.GetFilesAsync(); 
    foreach (StorageFile sf in temp) 
    { 
     if (sf.ContentType == "jpg") 
      return true; 
    } 
    return false; 
} 

あなたが後でそれをアクセスしたい場合は、あなたがfuture access listに追加し、返されたトークンを維持する必要があります。

public async static Task<string> GetFolderPathFromTheUser() 
{ 
    FolderPicker folderPicker = new FolderPicker(); 
    folderPicker.ViewMode = PickerViewMode.Thumbnail; 
    folderPicker.FileTypeFilter.Add("."); 
    var folder = await folderPicker.PickSingleFolderAsync(); 
    return FutureAccessList.Add(folder); 
} 
public async static Task<bool> IsContainImageFiles(string accessToken) 
{ 
    IStorageFolder folder = await FutureAccessList.GetFolderAsync(accessToken); 
    IReadOnlyList<StorageFile> temp= await folder.GetFilesAsync(); 
    foreach (StorageFile sf in temp) 
    { 
     if (sf.ContentType == "jpg") 
      return true; 
    } 
    return false; 
} 
関連する問題