如果一個文件夾包含很多文件(> 300..1000),並且磁盤驅動器速度不是很快,那麼我無法讓代碼可靠地加載完整的文件列表。首先它加載幾個文件(如10或100,取決於月亮的位置)。接下來的嘗試(runnin相同的代碼)會稍微返回更多,例如200,但不能保證這個數字會增長。UWP - 如何從文件夾中可靠地獲取文件?
我試過很多變種,包括:
res = new List<StorageFile>(await query.GetFilesAsync());
和:
public async static Task<List<StorageFile>> GetFilesInChunks(
this StorageFileQueryResult query)
{
List<StorageFile> res = new List<StorageFile>();
List<StorageFile> chunk = null;
uint chunkSize = 200;
bool isLastChance = false;
try
{
for (uint startIndex = 0; startIndex < 1000000;)
{
var files = await query.GetFilesAsync(startIndex, chunkSize);
chunk = new List<StorageFile>(files);
res.AddRange(chunk);
if (chunk.Count == 0)
{
if (isLastChance)
break;
else
{
/// pretty awkward attempt to rebuild the query, but this doesn't help too much :)
await query.GetFilesAsync(0, 1);
isLastChance = true;
}
}
else
isLastChance = false;
startIndex += (uint)chunk.Count;
}
}
catch
{
}
return res;
}
此代碼看起來有點複雜,但我已經嘗試了簡單的變型:(
會很高興得到你的幫助。