1. 程式人生 > >win10 UWP讀寫檔案

win10 UWP讀寫檔案

C# uwp應用的檔案讀寫最常見錯誤就是沒有許可權。
而最簡單的方法是對已知的檔案路徑進行訪問
已知的檔案路徑常見的是自身的路徑
許可權這個和之前不同,UWP讀寫檔案多用StorageFile來讀寫檔案
[TOC]
StorageFile沒有直接的開啟一個檔案的做法,而是通過StorageFolder建立,開啟檔案來進行。
下面程式碼需要using Windows.Storage;

獲取應用目錄的資料夾

StorageFolder folder;
            folder = ApplicationData.Current.LocalFolder;

建立檔案

獲取後,這裡不需要許可權,可以直接建立檔案

folder.CreateFileAsync(file_name , CreationCollisionOption.ReplaceExisting);

其中ApplicationData.CurrentCurrent的值可以是 LocalCacheFolder 本地臨時資料夾,LocalFolder 本地資料夾,LocalSettings 本地設定,RoamingFolder 漫遊資料夾,RoamingSettings 漫遊設定
建立檔案的時候可以選擇,如果存在了檔案的選擇CreationCollisionOption裡ReplaceExisting 如果檔案或資料夾已存在,則替換現有的項
FailIfExists 預設值 如果檔案或資料夾已存在,則引發型別為 System.Exception 的異常。
還有用的比較少的選項。

建立資料夾

建立資料夾和建立檔案也是一樣
先獲取本地的資料夾StorageFolder folder;
folder = ApplicationData.Current.LocalFolder;

建立資料夾

 folder.CreateFolderAsync(folder_name,CreationCollisionOption.ReplaceExisting);    

為了顯示已經做的,我做了一個函式來顯示void notify(string str)
把做出來的東西顯示出來

讀寫檔案

把建立的檔案存為file_demonstration

,對file_demonstration讀寫
可以把這個新的東西變為熟悉的
需要using System.IO;

Stream file = await file_demonstration.OpenStreamForWriteAsync()

這樣讀寫就很簡單
寫檔案程式碼

            using (Stream file = await file_demonstration.OpenStreamForWriteAsync())
            {
                using (StreamWriter write = new StreamWriter(file))
                {
                    write.Write("寫入");
                }
            }

讀檔案

            string s;
            using (Stream file = await file_demonstration.OpenStreamForReadAsync())
            {
                using (StreamReader read = new StreamReader(file))
                {
                    s = read.ReadToEnd();
                }                
            }

微軟官方的讀寫檔案
using Windows.Storage.Streams;
寫檔案

            using (StorageStreamTransaction transaction = await file_demonstration.OpenTransactedWriteAsync())
            {
                using (DataWriter dataWriter = new DataWriter(transaction.Stream))
                {
                    dataWriter.WriteString(str);
                    transaction.Stream.Size = await dataWriter.StoreAsync();
                    await transaction.CommitAsync();
                }
            }

讀檔案

using (IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read))
            {
                using (DataReader dataReader = new DataReader(readStream))
                {
                    UInt64 size = readStream.Size;
                    if (size <= UInt32.MaxValue)
                    {
                        UInt32 numBytesLoaded = await dataReader.LoadAsync((UInt32)size);
                        string fileContent = dataReader.ReadString(numBytesLoaded);
                    }
                }
            }

別的資料夾

我們用軟體安裝目錄的時候還是比較少,我們需要用到的資料夾還有很多,現在下面就有一些系統資料夾可以使用
圖片庫
選圖片庫可以使用folder_demonstration = KnownFolders.PicturesLibrary;
在生成前在清單請求許可權
配置
在清單請求圖片
除了圖片庫還有很多,在KnownFolders可以看到,使用前需要請求許可權。
還有下載檔案DownloadsFolder
folder_demonstration = DownloadsFolder.CreateFolderAsync(folder_name);

選取檔案

系統給的我們有時候還需要使用者選的檔案
選取檔案需要Windows.Storage.Pickers.FileOpenPicker,使用picker.PickSingleFileAsync()來出現選擇介面
在使用picker.PickSingleFileAsync()要設定字尾,選擇檔案的字尾picker.FileTypeFilter.Add(".txt");
一般我們有推薦第一次使用選擇進入的資料夾picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;

選取資料夾和選取檔案一樣

Windows.Storage.Pickers.FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
            folderPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
            folderPicker.FileTypeFilter.Add(".txt");
            StorageFolder folder = await folderPicker.PickSingleFolderAsync();
            if (folder != null)
            {
                notify("選擇" + folder.Name);
                folder_demonstration = folder;
            }

全部程式碼

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;

namespace file
{
    public class model
    {
        public model()
        {
            //C# uwp應用的檔案讀寫最常見錯誤
            //就是沒有許可權。
            //而最簡單的方法是對已知的檔案
            //路徑進行訪問
            //自身的路徑
            ce();

        }
        /// <summary>
        /// 結果
        /// </summary>
        public string result
        {
            set
            {
                _result.Add(value);
            }
            get
            {
                StringBuilder t = new StringBuilder();
                foreach (string s in _result)
                {
                    t.Append(s);
                }
                return t.ToString();
            }
        }
        public async void ce()
        {
            //建立檔案
            await create_ApplicationData("測試.txt");
            //建立資料夾
            await folder_ApplicationData("在安裝的路徑建立不需要許可權");

            //讀寫檔案和以前一樣
            await write_ApplicationData();
            await read_ApplicationData();

            //如果要讀寫別的地方的檔案,可以用
            //folder_demonstration = KnownFolders.PicturesLibrary;
            //要在清單請求許可權
            //DownloadsFolder 下載資料夾這裡也可以
            //folder_demonstration = DownloadsFolder.CreateFolderAsync(folder_name);
            //也可以讓使用者選


        }
        private StorageFile file_demonstration;//UWP 採用StorageFile來讀寫檔案
        private StorageFolder folder_demonstration;//folder來讀寫資料夾
        /// <summary>
        /// 自身路徑建立檔案
        /// </summary>
        /// <param name="file_name">要建立檔名字</param>
        /// <returns>已經建立的檔案</returns>
        public async Task create_ApplicationData(string file_name)
        {
            StorageFolder folder;
            folder = ApplicationData.Current.LocalFolder;
            //Current的值可以是
            //LocalCacheFolder 本地臨時資料夾
            //LocalFolder 本地資料夾
            //LocalSettings 本地設定
            //RoamingFolder 漫遊資料夾
            //RoamingSettings 漫遊設定

            file_demonstration = await folder.CreateFileAsync(file_name , CreationCollisionOption.ReplaceExisting);
            //CreationCollisionOption 可以選擇           
            //     如果檔案或資料夾已存在,則自動為指定名稱的基礎追加一個編號。例如,如果 MyFile.txt 已存在,則新檔名為 MyFile (2).txt。如果 MyFolder
            //     已存在,則新資料夾名為 MyFolder (2)。
            //GenerateUniqueName         
            //ReplaceExisting 如果檔案或資料夾已存在,則替換現有的項。            
            //FailIfExists 預設值 如果檔案或資料夾已存在,則引發型別為 System.Exception 的異常。        
            //OpenIfExists 如果檔案或資料夾已存在,則返回現有的項。

            notify("建立檔案成功,檔案路徑" + file_demonstration.Path);
        }

        /// <summary>
        /// 自身路徑建立資料夾
        /// </summary>
        /// <param name="file_name">要建立資料夾名字</param>
        /// <returns>已經建立的資料夾</returns>
        public async Task folder_ApplicationData(string folder_name)
        {
            StorageFolder folder;
            folder = ApplicationData.Current.LocalFolder;
            folder_demonstration = await folder.CreateFolderAsync(folder_name , CreationCollisionOption.ReplaceExisting);
            notify("建立資料夾成功,資料夾路徑" + folder_demonstration.Path);
        }

        /// <summary>
        /// 對自身路徑進行檔案讀寫
        /// </summary>
        public async Task write_ApplicationData()
        {
            using (Stream file = await file_demonstration.OpenStreamForWriteAsync())
            {
                using (StreamWriter write = new StreamWriter(file))
                {
                    write.Write("寫入");
                }
            }

            //using (StorageStreamTransaction transaction = await file_demonstration.OpenTransactedWriteAsync())
            //{
            //    using (DataWriter dataWriter = new DataWriter(transaction.Stream))
            //    {
            //        dataWriter.WriteString(str);
            //        transaction.Stream.Size = await dataWriter.StoreAsync();
            //        await transaction.CommitAsync();
            //    }
            //}

            notify("寫入檔案成功");
        }
        /// <summary>
        /// 讀檔案
        /// </summary>
        public async Task read_ApplicationData()
        {
            string s;
            using (Stream file = await file_demonstration.OpenStreamForReadAsync())
            {
                using (StreamReader read = new StreamReader(file))
                {
                    s = read.ReadToEnd();
                }
            }
            notify("讀檔案\"" + s + "\"");
        }
        public async Task file_open()
        {
            Windows.Storage.Pickers.FileOpenPicker picker = new Windows.Storage.Pickers.FileOpenPicker();
            //顯示方式
            picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
            //選擇最先的位置
            picker.SuggestedStartLocation =
                Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
            //字尾名
            picker.FileTypeFilter.Add(".txt");

            StorageFile file = await picker.PickSingleFileAsync();
            if (file != null)
            {               
                notify("選擇 " + file.Name);
                file_demonstration = file;
            }
        }
        public async Task folder_open()
        {
            Windows.Storage.Pickers.FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
            folderPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
            folderPicker.FileTypeFilter.Add(".txt");
            StorageFolder folder = await folderPicker.PickSingleFolderAsync();
            if (folder != null)
            {
                notify("選擇" + folder.Name);
                folder_demonstration = folder;
            }
        }

        private List<string> _result = new List<string>();
        private void notify(string str)
        {
            _result.Add(str + "\r\n");
        }

    }
}

相關推薦

win10 UWP檔案

C# uwp應用的檔案讀寫最常見錯誤就是沒有許可權。 而最簡單的方法是對已知的檔案路徑進行訪問 已知的檔案路徑常見的是自身的路徑 許可權這個和之前不同,UWP讀寫檔案多用StorageFile來讀寫檔案 [TOC] StorageFile沒有直接的開啟

《Learn python3 the hard way》ex16 檔案

作者想讓我們記住的命令: close- 關閉檔案,就像編輯器中的“檔案->另存為”一樣 read- 讀取檔案內容。你可以把讀取結果賦值給一個變數 readline- 只讀取文字檔案的一行內容 truncate- 清空檔案。清空的時候要當心 write("stuff")-給檔案寫入一些東

android檔案操作——檔案demo

寫檔案操作: public void save(String inputText) { FileOutputStream out = null; BufferedWriter writer = null; try {

PHP檔案

讀檔案的步驟 讀取檔案路徑,獲得檔案“指標” $DocRoot=$_SERVER["DOCUMENT_ROOT"]; @$fp=fopen("$DocRoot/../mytext/save.txt","ab");//二進位制追加開啟檔案 判斷檔案非空,如果讀取失敗,退出並提示對應資訊

python:檔案模式

  模式 描述 r 只讀,指標在檔案開頭 w 只寫。檔案存在被覆蓋,檔案不存在,建立新檔案 a 追加。檔案存在,指標在檔案末尾寫入;檔案不存在,

Python3.5開發3 - 基本命令及如何進行檔案

Python3.5開發3 - 基本命令及如何進行讀寫檔案 知識點: 熟練使用Python的列表,元組,集合與字典 熟練使用Python讀寫檔案 演示: # list a = [1,'yx',['x','y'],6]

Java專案中檔案

1.讀取檔案 InputStream input;//輸入流 InputStreamReader isr = null; BufferedReader br = null; //用於包裝InputStreamReader,提高處理效能。因為

java 使用 NIO 檔案

public static void Readnio() { RandomAccessFile randomAccessFile = null; FileChannel fileChannel = null; try {

Python 檔案 中文亂碼 錯誤TypeError: write() argument must be str, not bytes+

今天使用Python向檔案中寫入中文亂碼,程式碼如下: fo = open("temp.txt", "w+") str = '中文' fo.write(str) fo.close() 1 2 3 4

多緩衝區檔案

  使用 OVERLAPPED 來讀寫大檔案還錯,如果是小檔案效能不是特別好 , 這個僅僅是自己電腦的測試. 用多緩衝區來讀寫會比較快   一個例子: const int __BUFFSIZE = 8192; //

Python進階(二十五)-Python檔案

分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow 也歡迎轉載我的文章,轉載請註明出處 https://blog.csdn.net/mm2zzyzzp Python進階(二十五)-Python讀寫檔案

Java檔案,中文亂碼解決

讀檔案:使用new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));      StringBuffer strBuf = new StringBuffer(); BufferedRead

mxnet-檔案

# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ import mxnet as mx import numpy as np import pickle as pkl #1.pickle a =

python json模組檔案及格式檔案

如何讀寫json(JaveScript Object Notation) 編碼格式資料 1 把資料轉為json格式 >>> import json >>> data = {'name': 'xiecl', 'age': 16} >>> json_str

JAVA四則運算(檔案

完成時間:17:10 package 四則運算試題; import java.io.BufferedReader; import java.io.PrintStream; import java.util.Scanner; import java.io.FileReader; import java

Python3基礎之(十 五)檔案1

一、\n 換行命令 定義 text 為字串, 並檢視使用 \n 和不適用 \n 的區別: >>> text='this is first line,this is second line,this is third line' >>> prin

Python3基礎之(十 七)檔案3

一、讀取檔案內容 file.read() 上一節我們講了,寫檔案用的是'w'和'a',那麼今天來看看讀取檔案怎麼做 使用 file.read() 能夠讀取到文字的所有內容. if __name__=='__main__': file=open('my file.txt',

Python3基礎之(十 六)檔案2

我們先儲存一個已經有3行文字的 “my file.txt” 檔案, 檔案的內容如下: This is my first test. This is the second line. This the third 然後使用新增文字的方式給這個檔案新增一行 “This is ap

Python學習筆記系列——檔案以及敏感詞過濾器的實現

一、讀檔案 #開啟檔案,傳入檔名和識別符號,r代表讀 f= open('\\Users\ZC\Desktop\zc.txt','r') #呼叫read方法一次性讀取檔案的全部內容,存入記憶體,用str物件表示 print(f.read()) f.close() #使用with無論程式是否

C# & JAVA:檔案

using System; using System.IO; using System.Text; namespace ConsoleApplication4 { class Program { public static void Read(string path) { FileS