首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 8 Store Apps 開發實戰 (22):檔案系統進階 — 屬性查詢、縮圖、資料夾分組與 AQS 搜尋

     編輯:關於.NET

前言:超越基本讀寫的檔案系統進階功能

Windows.Storage 不只提供檔案讀寫,更內建豐富的中繼資料查詢、縮圖產生、虛擬資料夾分組、Advanced Query Syntax (AQS) 全文搜尋等企業級功能。本篇將這些進階特性一一拆解並給出實戰範例。

1. 檔案/資料夾屬性查詢

基本屬性

BasicProperties props = await file.GetBasicPropertiesAsync();
lblMsg.Text = "Size: " + props.Size;
lblMsg.Text += " DateModified: " + props.DateModified;

擴充屬性(系統屬性系統)

var propertyNames = new List<string> { "System.DateAccessed", "System.DateCreated", "System.FileOwner" };
IDictionary<string, object> extra = await file.Properties.RetrievePropertiesAsync(propertyNames);
lblMsg.Text += " Owner: " + extra["System.FileOwner"];

完整屬性清單請參考 MSDN System Properties。

2. 資料夾虛擬分組 — CommonFolderQuery

無需實體建立子資料夾,即可依月份、年份、評等等邏輯分組:

QueryOptions queryOptions = new QueryOptions(CommonFolderQuery.GroupByMonth);
StorageFolderQueryResult result = picturesFolder.CreateFolderQueryWithOptions(queryOptions);
IReadOnlyList<StorageFolder> virtualFolders = await result.GetFoldersAsync();

foreach (var monthFolder in virtualFolders)
{
    IReadOnlyList<StorageFile> files = await monthFolder.GetFilesAsync();
    // monthFolder.Name 為 "2024 年 1 月" 等格式
}

支援的分組類型:GroupByMonth、GroupByYear、GroupByRating、GroupByType 等。

3. Prefetch 預讀優化 — 大量檔案效能關鍵

查詢大量檔案時,預先指定需取得的屬性與縮圖,系統從 C:\Windows\Prefetch 讀取快取,大幅降低 I/O:

var queryOptions = new QueryOptions(CommonFileQuery.OrderByName, new List<string> { ".jpg", ".png" });

// 預取影像屬性(寬高等)與自訂屬性
queryOptions.SetPropertyPrefetch(PropertyPrefetchOptions.ImageProperties, 
    new List<string> { "System.FileOwner" });

// 預取縮圖
queryOptions.SetThumbnailPrefetch(ThumbnailMode.PicturesView, 190, ThumbnailOptions.UseCurrentScale);

var queryResult = KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> files = await queryResult.GetFilesAsync();
// 後續存取 properties.Width、GetThumbnailAsync() 幾乎零延遲

4. 縮圖存取 — GetThumbnailAsync 完整參數

ThumbnailMode mode = ThumbnailMode.PicturesView; // DocumentsView, VideosView, MusicView, ListView, SingleItem
uint requestedSize = 200;
ThumbnailOptions options = ThumbnailOptions.UseCurrentScale;

using (var thumbnail = await file.GetThumbnailAsync(mode, requestedSize, options))
{
    if (thumbnail != null)
    {
        var bitmap = new BitmapImage();
        bitmap.SetSource(thumbnail);
        img.Source = bitmap;
        // thumbnail.OriginalWidth/Height 為實際回傳尺寸
    }
}

5. AQS (Advanced Query Syntax) 本地搜尋

AQS 是 Windows 搜尋引擎的查詢語法,支援關鍵字、屬性限定、布林邏輯等:

var queryOptions = new QueryOptions(CommonFileQuery.OrderByDate, new List<string> { "*" });
queryOptions.UserSearchFilter = "五月天"; // AQS 字串

var fileQuery = musicFolder.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> files = await fileQuery.GetFilesAsync();

常用 AQS 語法速查

語法說明範例
關鍵字全文搜尋檔名、內容、標籤五月天
property:value屬性限定author:王小明、datetaken:2024/01/01
kind:類型檔案類別kind:music、kind:picture
AND / OR / NOT布林邏輯五月天 AND kind:music
""精確片語"擁抱"

完整程式碼下載

原始碼完整包(含所有範例專案)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved