[深入淺出WP8.1(Runtime)]應用文件的URI方案


6.2.4 應用文件的URI方案

    在上文我們獲取文件的方式都是通過應用程序的三個跟目錄的文件夾對象來獲取文件夾對象和文件對象,那么我們這一小節來講解一種新的獲取文件對象的方式,這種方式就是通過Uri地址來獲取。應用程序存儲里面的文件夾和文件其實和我們平時在Windows電腦上看到的文件的目錄是一樣的,只不過它們是在存儲里面,你並不能很直觀地看到他們的路徑,當然我們還是可以通過StorageFile類的Path屬性來查看到文件的保存路徑,例如我們查看一個在LocalFolder文件夾的testfile.txt文件的路徑會如下所示:

C:\Data\Users\DefApps\APPDATA\Local\Packages\6c522da7-81ed-4463-b58a-584c89af115e_thbaz9fn8knhr\LocalState\testfile.txt

    三個根目錄文件夾所對應的保存路徑的格式分別如下所示:

    (1)LocalFolder文件夾的保存路徑格式:

    %USERPROFILE%\APPDATA \Local\Packages\{PackageId}\LocalState

    (2)RoamingFolder文件夾的保存路徑格式:

    %USERPROFILE%\APPDATA \Local\Packages\{PackageId}\RoamingState

    (3)TemporaryFolder文件夾的保存路徑格式:

    %USERPROFILE%\APPDATA \Local\Packages\{PackageId}\TempState

    那本獲取到的這個路徑其實並不能作為訪問文件的路徑來使用,訪問文件的路徑需要使用本地文件夾的ms-appdata的URI方案。LocalFolder文件夾對應的是“ms-appdata:///local/”,RoamingFolder文件夾對應的是“ms-appdata:///roaming/”,TemporaryFolder文件夾對應的是 “ms-appdata:///temp/”。我們可以通過StorageFile類的靜態方法GetFileFromApplicationUriAsync來根據URI讀取文件,下面的示例代碼是使用了ms-appdata的URI方案來獲取在LocalFolder文件夾里面的AppConfigSettings.xml文件。

    var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/AppConfigSettings.xml"));

    在這種通過URI訪問文件的方案里面我們還需要注意一個事情,那就是新文件和文件夾的路徑在 URI 方案名稱的最后一個斜杠后面不能超過 185 個字符。

下面給出通過URI讀取文件的示例:該示例演示了創建一個文件之后獲取其絕對的路徑,讀取文件的時候是通過URI方案讀取文件。

代碼清單6-6:通過URI讀取文件(源代碼:第6章\Examples_6_6)

MainPage.xaml文件主要代碼
------------------------------------------------------------------------------------------------------------------
    <StackPanel>
        <TextBox Header="文件信息:" x:Name="info" TextWrapping="Wrap"></TextBox>
        <Button x:Name="bt_save" Content="創建文件" Width="370" Click="bt_save_Click"></Button>
        <Button x:Name="bt_read" Content="通過Uri讀取文件" Width="370" Click="bt_read_Click"></Button>       
    </StackPanel>
MainPage.xaml.cs文件主要代碼
------------------------------------------------------------------------------------------------------------------
    // 文件名
    private string fileName = "testfile.txt";
    // 創建文件
    private async void bt_save_Click(object sender, RoutedEventArgs e)
    {
        if (info.Text != "")
        {
            // 獲取本地文件夾根目錄文件夾
            IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
            // 在文件夾里面創建文件,如果文件存在則替換掉
            IStorageFile storageFile = await applicationFolder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
            // 使用FileIO類把字符串信息寫入文件
            await FileIO.WriteTextAsync(storageFile, info.Text);
            await new MessageDialog("保存成功,文件的路徑:" + storageFile.Path).ShowAsync();   
        }
        else
        {
            await new MessageDialog("內容不能為空").ShowAsync();
        }
    }
    // 讀取文件
    private async void bt_read_Click(object sender, RoutedEventArgs e)
    {
        // 讀取文件的文本信息
        string text;
        try
        {
            // 通過Uri獲取本地文件
            var storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/" + fileName));
            // 打開文件獲取文件的數據流
            IRandomAccessStream accessStream = await storageFile.OpenReadAsync();
            // 使用StreamReader讀取文件的內容,需要將IRandomAccessStream對象轉化為Stream對象來初始化StreamReader對象
            using (StreamReader streamReader = new StreamReader(accessStream.AsStreamForRead((int)accessStream.Size)))
            {
                text = streamReader.ReadToEnd();
            }
        }
        catch (Exception exce)
        {
            text = "文件讀取錯誤:" + exce.Message;
        }
        await new MessageDialog(text).ShowAsync();
    }

本文來源於《深入淺出Windows Phone 8.1 應用開發》

WP8.1 Runtime文章列表:http://www.cnblogs.com/linzheng/p/3998037.html

源代碼下載:http://vdisk.weibo.com/s/zt_pyrfNHb99O

歡迎關注我的微博@WP林政   微信公眾號:wp開發(號:wpkaifa)

WP8.1技術交流群:372552293


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM