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

win10 UWP读写文件的更多相关文章

  1. win10 uwp 关联文件

    有时候应用需要打开后缀名为x的文件,那么如何从文件打开应用? 首先,需要打开 Package.appxmanifest 添加一个功能,需要添加最少有名称,文件类型. 上面的图就是我添加jpg 的方法, ...

  2. win10 uwp 读写XML

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

  3. win10 uwp 判断文件存在

    本文主要翻译http://stackoverflow.com/questions/37119464/uwp-check-if-file-exists/37152526#37152526 我们有多种方法 ...

  4. win10 uwp 如何开始写 uwp 程序

    本文告诉大家如何创建一个 UWP 程序. 这是一系列的 uwp 入门博客,所以写的很简单 本文来告诉大家如何创建一个简单的程序 安装 VisualStudio 在开始写 UWP 需要安装 Visual ...

  5. win10 UWP 序列化

    将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. .NET Framewor ...

  6. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  7. win10 uwp smms图床

    本文,如何使用smms图床上传图片,用到win10 uwp post文件,因为我是渣渣,如果本文有错的,请和我说,在本文评论,或发给我邮箱lindexi_gd@163.com,请不要发不良言论 找到一 ...

  8. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)

    Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...

  9. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)

    Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...

随机推荐

  1. 201521123036 《Java程序设计》第3周学习总结

    本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来. 书面作业 Q1:代码阅读 public class Test1 { private ...

  2. 201521123100 《Java程序设计》第3周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...

  3. 201521123027 <java程序设计>第九周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...

  4. JAVA课程设计个人博客 学生成绩管理 201521123014 黄绍桦

    1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 本人主要负责DAO模式.添加和修改学生的信息功能 ...

  5. 多线程面试题系列(7):经典线程同步 互斥量Mutex

    前面介绍了关键段CS.事件Event在经典线程同步问题中的使用.本篇介绍用互斥量Mutex来解决这个问题. 互斥量也是一个内核对象,它用来确保一个线程独占一个资源的访问.互斥量与关键段的行为非常相似, ...

  6. Jquery第三篇【AJAX 相关的API】

    前言 前面我们已经学了讲解了Jquery的选择器,关于DOM 的API还有事件的API.本博文需要讲解Jquery对AJAX的支持- 我们在开始使用JavaScript学习AJAX的时候,创建异步对象 ...

  7. MyEclipse用Java语言连接Oracle数据库

    在MyEclipse下Java连接Oracle数据库 第一步:新建Java项目. 填写项目名,其它设置默认,点击完成即可. 新建java类,填写包名和类名,勾选public static void m ...

  8. PHP 动态调整内存限制

    最近公司的一个PHP项目在操作大文件的时候总是抛出这个异常 Fixing PHP Fatal Error: Allowed Memory Size Exhausted 经过一番调试后发现是达到了PHP ...

  9. 笔记本win10安装node的尖酸历程。。。。。。

    在公司的电脑搭建vue环境分分钟搞定,周末闲的无聊给自己的电脑也搭建一个环境,谁知道这么多的问题,记录下这些问题,希望对那些安装node环境有问题的朋友一些帮助. 1.下载安装node 下载地址htt ...

  10. Eclipse Oxygen 解决 自动导包的问题

    换成了 Eclipse 的Oxygen 版本 , 发现之前好用的自动导包功能不能用了 (Ctrl+Shift+O) 再 网上看资料  上面说 将  In Windows 替换为Editing Java ...