程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8 Store Apps學習(23) 文件系統: 文本的讀寫等

Windows 8 Store Apps學習(23) 文件系統: 文本的讀寫等

編輯:關於.NET

文件系統: 文本的讀寫, 二進制的讀寫, 流的讀寫, 最近訪問列表和未來訪問列表

介紹

重新想象 Windows 8 Store Apps 之 文件系統

演示如何讀寫文本數據

演示如何讀寫二進制數據

演示如何讀寫流數據

演示如何讀寫“最近訪問列表”和“未來訪問列表”

示例

1、演示如何讀寫文本數據

FileSystem/ReadWriteText.xaml.cs

/*
 * 演示如何讀寫文本數據
 * 注:如果需要讀寫某擴展名的文件,需要在 Package.appxmanifest 增加“文件類型關聯”聲明,並做相

應的配置
 * 
 * StorageFolder - 文件夾操作類
 *     獲取文件夾相關屬性、重命名、Create...、Get...等
 * 
 * StorageFile - 文件操作類
 *     獲取文件相關屬性、重命名、Create...、Get...、Copy...、Move...、Delete...、Open...、Replace...等
 *     
 * FileIO - 用於讀寫 IStorageFile 對象的幫助類
 *     WriteTextAsync() - 將指定的文本數據寫入到指定的文件
 *     AppendTextAsync() - 將指定的文本數據追加到指定的文件
 *     WriteLinesAsync() - 將指定的多行文本數據寫入到指定的文件
 *     AppendLinesAsync() - 將指定的多行文本數據追加到指定的文件
 *     ReadTextAsync() - 獲取指定的文件中的文本數據
 *     ReadLinesAsync() - 獲取指定的文件中的文本數據,返回的是一行一行的數據
 *     
 * 注:WinRT 中的關於存儲操作的相關類都在 Windows.Storage 命名空間內
 */
    
using System;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.FileSystem
{
    public sealed partial class ReadWriteText : Page
    {
        public ReadWriteText()
        {
            this.InitializeComponent();
        }
        private async void btnWriteText_Click_1(object sender, RoutedEventArgs e)
        {
            // 在指定的目錄下創建指定的文件
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.CreateFileAsync("webabcdText.txt", CreationCollisionOption.ReplaceExisting);
    
            // 在指定的文件中寫入指定的文本
            string textContent = "I am webabcd";
            await FileIO.WriteTextAsync(storageFile, textContent, Windows.Storage.Streams.UnicodeEncoding.Utf8);
    
            lblMsg.Text = "寫入成功";
        }
    
        private async void btnReadText_Click_1(object sender, RoutedEventArgs e)
        {
            // 在指定的目錄下獲取指定的文件
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.GetFileAsync("webabcdText.txt");
    
            if (storageFile != null)
            {
                // 獲取指定的文件中的文本內容
                string textContent = await FileIO.ReadTextAsync(storageFile, Windows.Storage.Streams.UnicodeEncoding.Utf8);
                lblMsg.Text = "讀取結果:" + textContent;
            }
        }
    }
}

2、演示如何讀寫二進制數據

FileSystem/ReadWriteBinary.xaml.cs

/*
 * 演示如何讀寫二進制數據
 * 注:如果需要讀寫某擴展名的文件,需要在 Package.appxmanifest 增加“文件類型關聯”聲明,並做相應的配置
 * 
 * StorageFolder - 文件夾操作類
 *     獲取文件夾相關屬性、重命名、Create...、Get...等
 * 
 * StorageFile - 文件操作類
 *     獲取文件相關屬性、重命名、Create...、Get...、Copy...、Move...、Delete...、Open...、Replace...等
 *     
 * FileIO - 用於讀寫 IStorageFile 對象的幫助類
 *     WriteBufferAsync() - 將指定的二進制數據寫入指定的文件
 *     ReadBufferAsync() - 獲取指定的文件中的二進制數據
 *     
 * IBuffer - WinRT 中的字節數組
 *     
 * 注:WinRT 中的關於存儲操作的相關類都在 Windows.Storage 命名空間內
 */
    
using System;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.FileSystem
{
    public sealed partial class ReadWriteBinary : Page
    {
        public ReadWriteBinary()
        {
            this.InitializeComponent();
        }
    
        private async void btnWriteBinary_Click_1(object sender, RoutedEventArgs e)
        {
            // 在指定的目錄下創建指定的文件
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.CreateFileAsync("webabcdBinary.txt", CreationCollisionOption.ReplaceExisting);
    
            // 將字符串轉換成二進制數據,並保存到指定文件
            string textContent = "I am webabcd";
            IBuffer buffer = ConverterHelper.String2Buffer(textContent);
            await FileIO.WriteBufferAsync(storageFile, buffer);
    
            lblMsg.Text = "寫入成功";
        }
    
        private async void btnReadBinary_Click_1(object sender, RoutedEventArgs e)
        {
            // 在指定的目錄下獲取指定的文件
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.GetFileAsync("webabcdBinary.txt");
    
            if (storageFile != null)
            {
                // 獲取指定文件中的二進制數據,將其轉換成字符串並顯示
                IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);
                string textContent = ConverterHelper.Buffer2String(buffer);
    
                lblMsg.Text = "讀取結果:" + textContent;
            }
        }
    }
}

3、演示如何讀寫流數據

FileSystem/ReadWriteStream.xaml.cs

/*
 * 演示如何讀寫流數據
 * 注:如果需要讀寫某擴展名的文件,需要在 Package.appxmanifest 增加“文件類型關聯”聲明,並做相應的配置
 * 
 * StorageFolder - 文件夾操作類
 *     獲取文件夾相關屬性、重命名、Create...、Get...等
 * 
 * StorageFile - 文件操作類
 *     獲取文件相關屬性、重命名、Create...、Get...、Copy...、Move...、Delete...、Open...、Replace...等
 *     
 * IBuffer - WinRT 中的字節數組
 * 
 * IInputStream - 需要讀取的流
 * IOutputStream - 需要寫入的流
 * IRandomAccessStream - 需要讀取、寫入的流,其繼承自 IInputStream 和 IOutputStream
 * 
 * DataReader - 從數據流中讀取數據,即從 IInputStream 讀取
 *     LoadAsync() - 從數據流中加載指定長度的數據到緩沖區
 *     ReadInt32(), ReadByte(), ReadString() 等 - 從緩沖區中讀取數據
 * DataWriter - 將數據寫入數據流,即寫入 IOutputStream
 *     WriteInt32(), WriteByte(), WriteString() 等 - 將數據寫入緩沖區
 *     StoreAsync() - 將緩沖區中的數據保存到數據流
 * 
 * StorageStreamTransaction - 用於寫數據流到文件的類(具體用法,詳見下面的代碼)
 *     Stream - 數據流(只讀)
 *     CommitAsync - 將數據流保存到文件
 *     
 * 注:WinRT 中的關於存儲操作的相關類都在 Windows.Storage 命名空間內
 */
    
using System;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.FileSystem
{
    public sealed partial class ReadWriteStream : Page
    {
        public ReadWriteStream()
        {
            this.InitializeComponent();
        }
    
        private async void btnWriteStream_Click_1(object sender, RoutedEventArgs e)
        {
            // 在指定的目錄下創建指定的文件
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.CreateFileAsync("webabcdStream.txt", CreationCollisionOption.ReplaceExisting);
    
            string textContent = "I am webabcd";
    
            using (StorageStreamTransaction transaction = await storageFile.OpenTransactedWriteAsync())
            {
                using (DataWriter dataWriter = new DataWriter(transaction.Stream))
                {
                    // 將字符串寫入數據流,然後將數據流保存到文件
                    dataWriter.WriteString(textContent);
                    transaction.Stream.Size = await dataWriter.StoreAsync();
                    await transaction.CommitAsync();
    
                    lblMsg.Text = "寫入成功";
                }
            }
        }
    
        private async void btnReadStream_Click_1(object sender, RoutedEventArgs e)
        {
            // 在指定的目錄下獲取指定的文件
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.GetFileAsync("webabcdStream.txt");
    
            if (storageFile != null)
            {
                using (IRandomAccessStream randomStream = await storageFile.OpenAsync(FileAccessMode.Read))
                {
                    using (DataReader dataReader = new DataReader(randomStream))
                    {
                        ulong size = randomStream.Size;
                        if (size <= uint.MaxValue)
                        {
                            // 獲取數據流,從中讀取字符串值並顯示
                            uint numBytesLoaded = await dataReader.LoadAsync((uint)size);
                            string fileContent = dataReader.ReadString(numBytesLoaded);
    
                            lblMsg.Text = "讀取結果:" + fileContent;
                        }
                    }
                }
            }
        }
    }
}

4、演示如何讀寫“最近訪問列表”和“未來訪問列表”

FileSystem/CacheAccess.xaml

<Page
    x:Class="XamlDemo.FileSystem.CacheAccess"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.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="120 0 0 0">
                
            <TextBlock Name="lblMsg" FontSize="14.667" />
    
            <Button Name="btnAddToMostRecentlyUsedList" Content="AddToMostRecentlyUsedList" Click="btnAddToMostRecentlyUsedList_Click_1" Margin="0 10 0 0" />
    
            <Button Name="btnGetMostRecentlyUsedList" Content="GetMostRecentlyUsedList" Click="btnGetMostRecentlyUsedList_Click_1" Margin="0 10 0 0" />
    
            <Button Name="btnAddToFutureAccessList" Content="AddToFutureAccessList" Click="btnAddToFutureAccessList_Click_1" Margin="0 10 0 0" />
    
            <Button Name="btnGetFutureAccessList" Content="GetFutureAccessList" Click="btnGetFutureAccessList_Click_1" Margin="0 10 0 0" />
    
        </StackPanel>
    </Grid>
</Page>

FileSystem/CacheAccess.xaml.cs

/*
 * 演示如何讀寫“最近訪問列表”和“未來訪問列表”
 * 注:如果需要讀寫某擴展名的文件,需要在 Package.appxmanifest 增加“文件類型關聯”聲明,並做相應的配置
 * 
 * StorageFolder - 文件夾操作類
 *     獲取文件夾相關屬性、重命名、Create...、Get...等
 * 
 * StorageFile - 文件操作類
 *     獲取文件相關屬性、重命名、Create...、Get...、Copy...、Move...、Delete...、Open...、Replace...等
 *     
 * StorageApplicationPermissions - 文件/文件夾的訪問列表
 *     MostRecentlyUsedList - 最近訪問列表(實現了 IStorageItemAccessList 接口)
 *         Add(IStorageItem file, string metadata) - 添加文件或文件夾到“最近訪問列表”,返回 token 值(一個字符串類型的標識),通過此值可以方便地檢索到對應的文件或文件夾
 *             file - 需要添加到列表的文件或文件夾
 *             metadata - 自定義元數據,相當於上下文
 *         AddOrReplace(string token, IStorageItem file, string metadata) - 添加文件或文件夾到“最近訪問列表”,如果已存在則替換
 *         GetFileAsync(string token) - 根據 token 值,在“最近訪問列表”查找對應的文件
 *         GetFolderAsync(string token) - 根據 token 值,在“最近訪問列表”查找對應的文件夾
 *         GetItemAsync(string token) - 根據 token 值,在“最近訪問列表”查找對應的文件或文件夾
 *         Entries - 返回 AccessListEntryView 類型的數據,其是 AccessListEntry 類型數據的集合
 *     FutureAccessList - 未來訪問列表(實現了 IStorageItemAccessList 接口)
 *         基本用法同“MostRecentlyUsedList”
 *         
 * AccessListEntry - 用於封裝訪問列表中的 StorageFile 或 StorageFolder 的 token 和元數據
 *     Token - token 值
 *     Metadata - 元數據
 *     
 * 注:WinRT 中的關於存儲操作的相關類都在 Windows.Storage 命名空間內
 */
    
using System;
using Windows.Storage;
using Windows.Storage.AccessCache;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
    
namespace XamlDemo.FileSystem
{
    public sealed partial class CacheAccess : Page
    {
        public CacheAccess()
        {
            this.InitializeComponent();
        }
    
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 在指定的目錄下創建指定的文件
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.CreateFileAsync("webabcdCacheAccess.txt", CreationCollisionOption.ReplaceExisting);
    
            // 在指定的文件中寫入指定的文本
            string textContent = "I am webabcd";
            await FileIO.WriteTextAsync(storageFile, textContent, Windows.Storage.Streams.UnicodeEncoding.Utf8);
        }
    
        private async void btnAddToMostRecentlyUsedList_Click_1(object sender, RoutedEventArgs e)
        {
            // 獲取文件對象
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.GetFileAsync("webabcdCacheAccess.txt");
    
            if (storageFile != null)
            {
                // 將文件添加到“最近訪問列表”,並獲取對應的 token 值
                string token = StorageApplicationPermissions.MostRecentlyUsedList.Add(storageFile, storageFile.Name);
                lblMsg.Text = "token:" + token;
            }
        }
    

        private async void btnAddToFutureAccessList_Click_1(object sender, RoutedEventArgs e)
        {
            // 獲取文件對象
            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
            StorageFile storageFile = await storageFolder.GetFileAsync("webabcdCacheAccess.txt");
    
            if (storageFile != null)
            {
                // 將文件添加到“未來訪問列表”,並獲取對應的 token 值
                string token = StorageApplicationPermissions.FutureAccessList.Add(storageFile, storageFile.Name);
                lblMsg.Text = "token:" + token;
            }
        }
    
        private async void btnGetMostRecentlyUsedList_Click_1(object sender, RoutedEventArgs e)
        {
            AccessListEntryView entries = StorageApplicationPermissions.MostRecentlyUsedList.Entries;
            if (entries.Count > 0)
            {
                // 通過 token 值,從“最近訪問列表”中獲取文件對象
                AccessListEntry entry = entries[0];
                StorageFile storageFile = await StorageApplicationPermissions.MostRecentlyUsedList.GetFileAsync(entry.Token);
    
                string textContent = await FileIO.ReadTextAsync(storageFile);
                lblMsg.Text = "MostRecentlyUsedList 的第一個文件的文本內容:" + textContent;
            }
            else
            {
                lblMsg.Text = "最近訪問列表中無數據";
            }
        }
    
        private async void btnGetFutureAccessList_Click_1(object sender, RoutedEventArgs e)
        {
            AccessListEntryView entries = StorageApplicationPermissions.FutureAccessList.Entries;
            if (entries.Count > 0)
            {
                // 通過 token 值,從“未來訪問列表”中獲取文件對象
                AccessListEntry entry = entries[0];
                StorageFile storageFile = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(entry.Token);
    
                string textContent = await FileIO.ReadTextAsync(storageFile);
                lblMsg.Text = "FutureAccessList 的第一個文件的文本內容:" + textContent;
            }
            else
            {
                lblMsg.Text = "未來訪問列表中無數據";
            }
        }
    }
}

OK

[源碼下載]:http://files.cnblogs.com/webabcd/Windows8.rar

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved