背水一戰 Windows 10 之 文件系統: 獲取文件夾的屬性, 獲取文件夾的縮略圖 ...
背水一戰 Windows 10 (86) - 文件系統: 獲取文件夾的屬性, 獲取文件夾的縮略圖
作者:webabcd
介紹
背水一戰 Windows 10 之 文件系統
- 獲取文件夾的屬性
- 獲取文件夾的縮略圖
示例
1、演示如何獲取文件夾的屬性
FileSystem/FolderProperties.xaml
<Page x:Class="Windows10.FileSystem.FolderProperties" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.FileSystem" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="10 0 10 10"> <ListBox Name="listBox" Width="400" Height="200" HorizontalAlignment="Left" Margin="5" SelectionChanged="listBox_SelectionChanged" /> <TextBlock Name="lblMsg" Margin="5" /> </StackPanel> </Grid> </Page>
FileSystem/FolderProperties.xaml.cs
/* * 演示如何獲取文件夾的屬性 * * StorageFolder - 文件夾操作類 * 直接通過調用 Name, Path, DisplayName, DisplayType, FolderRelativeId, Provider, DateCreated, Attributes 獲取相關屬性,詳見文檔 * GetBasicPropertiesAsync() - 返回一個 BasicProperties 類型的對象 * Properties - 返回一個 StorageItemContentProperties 類型的對象 * * BasicProperties * 可以獲取的數據有 Size, DateModified, ItemDate * * StorageItemContentProperties * 通過調用 RetrievePropertiesAsync() 方法來獲取指定的屬性,詳見下麵的示例 */ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Windows.Storage; using Windows.Storage.FileProperties; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace Windows10.FileSystem { public sealed partial class FolderProperties : Page { public FolderProperties() { this.InitializeComponent(); } protected async override void OnNavigatedTo(NavigationEventArgs e) { // 獲取“圖片庫”目錄下的所有根文件夾 StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); IReadOnlyList<StorageFolder> folderList = await picturesFolder.GetFoldersAsync(); listBox.ItemsSource = folderList.Select(p => p.Name).ToList(); base.OnNavigatedTo(e); } private async void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 用戶選中的文件夾 string folderName = (string)listBox.SelectedItem; StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); StorageFolder storageFolder = await picturesFolder.GetFolderAsync(folderName); // 顯示文件夾的各種屬性 ShowProperties1(storageFolder); await ShowProperties2(storageFolder); await ShowProperties3(storageFolder); } // 通過 StorageFolder 獲取文件夾的屬性 private void ShowProperties1(StorageFolder storageFolder) { lblMsg.Text = "Name:" + storageFolder.Name; lblMsg.Text += Environment.NewLine; lblMsg.Text += "Path:" + storageFolder.Path; lblMsg.Text += Environment.NewLine; lblMsg.Text += "DisplayName:" + storageFolder.DisplayName; lblMsg.Text += Environment.NewLine; lblMsg.Text += "DisplayType:" + storageFolder.DisplayType; lblMsg.Text += Environment.NewLine; lblMsg.Text += "FolderRelativeId:" + storageFolder.FolderRelativeId; lblMsg.Text += Environment.NewLine; lblMsg.Text += "Provider:" + storageFolder.Provider; lblMsg.Text += Environment.NewLine; lblMsg.Text += "DateCreated:" + storageFolder.DateCreated; lblMsg.Text += Environment.NewLine; lblMsg.Text += "Attributes:" + storageFolder.Attributes; // 返回一個 FileAttributes 類型的枚舉(FlagsAttribute),可以從中獲知文件夾是否是 ReadOnly 之類的信息 lblMsg.Text += Environment.NewLine; } // 通過 StorageFolder.GetBasicPropertiesAsync() 獲取文件夾的屬性 private async Task ShowProperties2(StorageFolder storageFolder) { BasicProperties basicProperties = await storageFolder.GetBasicPropertiesAsync(); lblMsg.Text += "Size:" + basicProperties.Size; lblMsg.Text += Environment.NewLine; lblMsg.Text += "DateModified:" + basicProperties.DateModified; lblMsg.Text += Environment.NewLine; lblMsg.Text += "ItemDate:" + basicProperties.ItemDate; lblMsg.Text += Environment.NewLine; } // 通過 StorageFolder.Properties 的 RetrievePropertiesAsync() 方法獲取文件夾的屬性 private async Task ShowProperties3(StorageFolder storageFolder) { /* * 獲取文件夾的其它各種屬性 * 詳細的屬性列表請參見結尾處的“附錄一: 屬性列表”或者參見:http://msdn.microsoft.com/en-us/library/windows/desktop/ff521735(v=vs.85).aspx */ List<string> propertiesName = new List<string>(); propertiesName.Add("System.DateAccessed"); propertiesName.Add("System.DateCreated"); propertiesName.Add("System.FileOwner"); StorageItemContentProperties storageItemContentProperties = storageFolder.Properties; IDictionary<string, object> extraProperties = await storageItemContentProperties.RetrievePropertiesAsync(propertiesName); lblMsg.Text += "System.DateAccessed:" + extraProperties["System.DateAccessed"]; lblMsg.Text += Environment.NewLine; lblMsg.Text += "System.DateCreated:" + extraProperties["System.DateCreated"]; lblMsg.Text += Environment.NewLine; lblMsg.Text += "System.FileOwner:" + extraProperties["System.FileOwner"]; lblMsg.Text += Environment.NewLine; } } } /* ---------------------------------------------------------------------- 附錄一: 屬性列表 System.AcquisitionID System.ApplicationName System.Author System.Capacity System.Category System.Comment System.Company System.ComputerName System.ContainedItems System.ContentStatus System.ContentType System.Copyright System.DataObjectFormat System.DateAccessed System.DateAcquired System.DateArchived System.DateCompleted System.DateCreated System.DateImported System.DateModified System.DefaultSaveLocationIconDisplay System.DueDate System.EndDate System.FileAllocationSize System.FileAttributes System.FileCount System.FileDescription System.FileExtension System.FileFRN System.FileName System.FileOwner System.FileVersion System.FindData System.FlagColor System.FlagColorText System.FlagStatus System.FlagStatusText System.FreeSpace System.FullText System.Identity System.Identity.Blob System.Identity.DisplayName System.Identity.IsMeIdentity System.Identity.PrimaryEmailAddress System.Identity.ProviderID System.Identity.UniqueID System.Identity.UserName System.IdentityProvider.Name System.IdentityProvider.Picture System.ImageParsingName System.Importance System.ImportanceText System.IsAttachment System.IsDefaultNonOwnerSaveLocation System.IsDefaultSaveLocation System.IsDeleted System.IsEncrypted System.IsFlagged System.IsFlaggedComplete System.IsIncomplete System.IsLocationSupported System.IsPinnedToNameSpaceTree System.IsRead System.IsSearchOnlyItem System.IsSendToTarget System.IsShared System.ItemAuthors System.ItemClassType System.ItemDate System.ItemFolderNameDisplay System.ItemFolderPathDisplay System.ItemFolderPathDisplayNarrow System.ItemName System.ItemNameDisplay System.ItemNamePrefix System.ItemParticipants System.ItemPathDisplay System.ItemPathDisplayNarrow System.ItemType System.ItemTypeText System.ItemUrl System.Keywords System.Kind System.KindText System.Language System.LayoutPattern.ContentViewModeForBrowse System.LayoutPattern.ContentViewModeForSearch System.LibraryLocationsCount System.MileageInformation System.MIMEType System.Null System.OfflineAvailability System.OfflineStatus System.OriginalFileName System.OwnerSID System.ParentalRating System.ParentalRatingReason System.ParentalRatingsOrganization System.ParsingBindContext System.ParsingName System.ParsingPath System.PerceivedType System.PercentFull System.Priority System.PriorityText System.Project System.ProviderItemID System.Rating System.RatingText System.Sensitivity System.SensitivityText System.SFGAOFlags System.SharedWith System.ShareUserRating System.SharingStatus System.Shell.OmitFromView System.SimpleRating System.Size System.SoftwareUsed System.SourceItem System.StartDate System.Status System.StatusBarSelectedItemCount System.StatusBarViewItemCount System.Subject System.Thumbnail System.ThumbnailCacheId System.ThumbnailStream System.Title System.TotalFileSize System.Trademarks ---------------------------------------------------------------------- */
2、演示如何獲取文件的縮略圖
FileSystem/FileThumbnail.xaml
<Page x:Class="Windows10.FileSystem.FileThumbnail" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.FileSystem" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <ListBox Name="listBox" Width="400" Height="200" HorizontalAlignment="Left" Margin="5" SelectionChanged="listBox_SelectionChanged" /> <Image Name="imageThumbnail" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="5" /> </StackPanel> </Grid> </Page>
FileSystem/FileThumbnail.xaml.cs
/* * 演示如何獲取文件的縮略圖 * * StorageFile - 文件操作類。與獲取文件縮略圖相關的介面如下 * public IAsyncOperation<StorageItemThumbnail> GetThumbnailAsync(ThumbnailMode mode); * public IAsyncOperation<StorageItemThumbnail> GetThumbnailAsync(ThumbnailMode mode, uint requestedSize); * public IAsyncOperation<StorageItemThumbnail> GetThumbnailAsync(ThumbnailMode mode, uint requestedSize, ThumbnailOptions options); * ThumbnailMode mode - 用於描述縮略圖的目的,以使系統確定縮略圖圖像的調整方式(就用 SingleItem 即可) * uint requestedSize - 期望尺寸的最長邊長的大小 * ThumbnailOptions options - 檢索和調整縮略圖的行為(預設值:UseCurrentScale) * * StorageItemThumbnail - 縮略圖(實現了 IRandomAccessStream 介面,可以直接轉換為 BitmapImage 對象) * OriginalWidth - 縮略圖的寬 * OriginalHeight - 縮略圖的高 * Size - 縮略圖的大小(單位:位元組) */ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Windows.Storage; using Windows.Storage.FileProperties; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Navigation; namespace Windows10.FileSystem { public sealed partial class FileThumbnail : Page { public FileThumbnail() { this.InitializeComponent(); } protected async override void OnNavigatedTo(NavigationEventArgs e) { // 獲取“圖片庫”目錄下的所有根文件 StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); IReadOnlyList<StorageFile> fileList = await picturesFolder.GetFilesAsync(); listBox.ItemsSource = fileList.Select(p => p.Name).ToList(); base.OnNavigatedTo(e); } private async void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 用戶選中的文件 string fileName = (string)listBox.SelectedItem; StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); StorageFile storageFile = await picturesFolder.GetFileAsync(fileName); // 顯示文件的縮略圖 await ShowThumbnail(storageFile); } private async Task ShowThumbnail(StorageFile storageFile) { // 如果要獲取文件的縮略圖,就指定為 ThumbnailMode.SingleItem 即可 ThumbnailMode thumbnailMode = ThumbnailMode.SingleItem; uint requestedSize = 200; ThumbnailOptions thumbnailOptions = ThumbnailOptions.UseCurrentScale; using (StorageItemThumbnail thumbnail = await storageFile.GetThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions)) { if (thumbnail != null) { BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(thumbnail); imageThumbnail.Source = bitmapImage; lblMsg.Text = $"thumbnail1 requestedSize:{requestedSize}, returnedSize:{thumbnail.OriginalWidth}x{thumbnail.OriginalHeight}, size:{thumbnail.Size}"; } } } } }
OK
[源碼下載]