3

フォルダーとそのサブフォルダー内のすべてのファイルを取得したい。しかし、次のようなフラットなクエリ:

var allFiles = await myFolder.GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByName);

例外をスローしArgumentExceptionます:

タイプ 'System.ArgumentException' の初回例外が発生しました

追加情報: 値が期待される範囲内にありません。

サブフォルダーを 1 つずつクエリする前に、他の方法はありませんか?

4

5 に答える 5

1

MSDN によると、次の場合に取得できますSystem.ArgumentException

ライブラリ フォルダーではないフォルダーDefaultQueryの列挙値以外の値を指定しました。CommonFileQuery

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

于 2015-09-20T06:23:00.307 に答える
0

変です!を除くすべての CommaonFileQuery オプションを使用した GetFilesAsync メソッドのバグのようDefaultQueryです。DefaultQuery で問題なく動作しています。

  var allFiles = await myFolder.GetFilesAsync(CommonFileQuery.DefaultQuery);

お役に立てれば!

于 2014-08-03T10:57:30.763 に答える
-1

私は同じ問題を抱えていましたが、ファイルパスを再帰的にプリロードすることで解決しました:

private static List<string> mContentFilenames = new List<string>();


private static void preloadContentFilenamesRecursive(StorageFolder sf)
{
    var files = sf.GetFilesAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
    if (files != null)
    {
        foreach (var f in files)
        {
            mContentFilenames.Add(f.Path.Replace('\\','/'));
        }
    }
    var folders = sf.GetFoldersAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
    if (folders != null)
    {
        foreach (var f in folders)
        {
            preloadContentFilenamesRecursive(f);
        }
    }

}

private static void preloadContentFilenames()
{
    if (mContentFilenames.Count > 0)
        return;
    var installed_loc = Windows.ApplicationModel.Package.Current.InstalledLocation;
    var content_folder = installed_loc.GetFolderAsync("Content").AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
    if (content_folder != null)
        preloadContentFilenamesRecursive(content_folder);
}

private static bool searchContentFilename(string name)
{
    var v = from val in mContentFilenames where val.EndsWith(name.Replace('\\', '/')) select val;
    return v.Any();
}

WP8.1 で完全なファイルリストを取得する方法は他にありません。奇妙な理由により、MSFT はその API をバージョンごとに破損させます。一部の呼び出しで「未実装」が返されるようになりました。

于 2016-12-26T16:36:50.767 に答える