win10 UWP读写文件

标签: uwp读写文件 uwp win10 代码 应用
13775人阅读 评论(0) 收藏 举报
分类:

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");
        }

    }
}

https://code.csdn.net/lindexi_gd/uwp_write_read_file

查看评论

UWP入门(十)--创建、写入和读取文件

核心的 API github代码 StorageFolder 类 StorageFile 类 FileIO 类 使用 StorageFile 对象读取和写入文件 1. 创建文件// Create sa...
  • u011033906
  • u011033906
  • 2017-03-23 18:32:40
  • 2534

UWP应用的访问文件资源的URI

应用在安装了之后,会自动生成三个文件夹存放应用的数据,分别是local 文件夹(用来存放本地数据)、roaming 文件夹(用来存放漫游数据)或 temp 文件夹(用来寻访临时数据)。在程序中访问这三...
  • azs1478963
  • azs1478963
  • 2016-05-28 12:31:46
  • 3356

win10 uwp 保存用户选择文件夹

如果我们每次把临时处理的文件保存,都要让用户选择一次,用户会不会觉得uwp垃圾?如果我们每次打开应用,都从某个文件读取,而这个文件不在应用目录和已知的目录,那么每次都需要用户选择,用户会不会觉得uwp...
  • lindexi_gd
  • lindexi_gd
  • 2016-10-09 09:28:04
  • 3010

UWP从服务器下载文件

  • 2017年08月30日 11:45
  • 2KB
  • 下载

[Unity3D]适用于UWP的XmlDocument使用方法

本篇演示XmlDocument既可在UWP中使用又可在Unity3D编辑器中使用的方法。
  • u012741077
  • u012741077
  • 2016-08-10 01:39:52
  • 1619

win10 uwp 读写XML

UWP 对 读写 XML做了一些修改,但和之前 WPF 的方法没有大的区别。 我们先来说下什么是 XML , XML 其实是 树结构,可以表达复杂的结构,所以在定制要求高的、或其他方面如json 做...
  • lindexi_gd
  • lindexi_gd
  • 2017-05-02 08:59:43
  • 1612

获取UWP配置文件中的版本信息

在一般的软件中,我们都会显示当前软件的版本信息。以前作者都是在发版的时候修改一下UWP的配置文件中的版本信息和软件中的版本信息。但是每次这样很麻烦,有时间忘记修改了软件中的版本信息就会造成发布的版本和...
  • suixiangzhe
  • suixiangzhe
  • 2017-08-25 13:59:30
  • 442

Win10之UWP的数据存储

我们知道通常我们开发的时候都要考虑把用户的数据存储到一个数据库里面,而这个数据库则考虑到了整个应用的性能上面,这里我们不考虑SQL server的数据库,我们考虑较为轻量的数据库进行存储。首先我们新建...
  • zhongyanfu0
  • zhongyanfu0
  • 2016-07-13 17:12:18
  • 1566

Open中FileStorage使用

Open中FileStorage使用介绍 简介由于OpenCV中检测中,很多源码涉及到相关信息写入文件或从文件中读取,故将其相关内容总结如下。FileStorage主要作用:将相关信息写入YAML或X...
  • yzhang6_10
  • yzhang6_10
  • 2016-04-01 10:43:06
  • 3830

C#流Stream的使用总结

文件流占用资源比较多,而且工作效率叫低,所以在使用完流操作后应及时使用Close()关闭流 也可以使用using来及时的释放流所占用的资源 一、文件流FileStream  ...
  • u010512579
  • u010512579
  • 2014-01-06 17:48:51
  • 5441
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 70万+
    积分: 9986
    排名: 2179
    博客专栏
    文章分类
    最新评论