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读写文件的更多相关文章
- win10 uwp 关联文件
有时候应用需要打开后缀名为x的文件,那么如何从文件打开应用? 首先,需要打开 Package.appxmanifest 添加一个功能,需要添加最少有名称,文件类型. 上面的图就是我添加jpg 的方法, ...
- win10 uwp 读写XML
UWP 对 读写 XML做了一些修改,但和之前 WPF 的方法没有大的区别. 我们先来说下什么是 XML , XML 其实是 树结构,可以表达复杂的结构,所以在定制要求高的.或其他方面如json 做不 ...
- win10 uwp 判断文件存在
本文主要翻译http://stackoverflow.com/questions/37119464/uwp-check-if-file-exists/37152526#37152526 我们有多种方法 ...
- win10 uwp 如何开始写 uwp 程序
本文告诉大家如何创建一个 UWP 程序. 这是一系列的 uwp 入门博客,所以写的很简单 本文来告诉大家如何创建一个简单的程序 安装 VisualStudio 在开始写 UWP 需要安装 Visual ...
- win10 UWP 序列化
将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. .NET Framewor ...
- win10 uwp 入门
UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...
- win10 uwp smms图床
本文,如何使用smms图床上传图片,用到win10 uwp post文件,因为我是渣渣,如果本文有错的,请和我说,在本文评论,或发给我邮箱lindexi_gd@163.com,请不要发不良言论 找到一 ...
- 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)
Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...
- 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)
Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...
随机推荐
- 【Alpha】Daily Scrum Meeting——Day3
站立式会议照片 1.本次会议为第三次 Meeting会议: 2.本次会议于早上9:40在陆大楼召开,本次会议为30分钟讨论昨天的任务完成情况以及接下来的任务安排. 每个人的工作分配 成 员 昨天已完成 ...
- 201521123060《Java程序设计》第2周学习总结
1. 本周学习总结 a.进一步熟悉了Eclipse的使用和java程序的编写: b.学习了java数据的基本类型:整数类型,浮点类型等: c.学习了算数运算符,赋值运算符,位运算符,关系运算符,逻辑运 ...
- 201521123081《Java程序设计》 第1周学习总结
#1. 本周学习总结 ###JAVA是1995年SUN推出的一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的,安全的,结构的,中立的,可移植的,性能很优异的,多线程的,动态的语言.是世界上广 ...
- 压缩空格的函数以及BCD码与ASCII相互转换函数
/**函数名:zip_space功能 :压缩空格的函数参数 : s 源字符串返回值: 0 成功**/ int zip_space(char *s){ int i,j; int len; ) { ; } ...
- 设置文件opendilag、savedilog默认路径和文件类型
dlgSave1.Filter:='文件.txt|*.txt;|word文件|*.doc,*.docx'; dlgSave1.InitialDir:=GetCurrentDir; //设置为当前路径 ...
- 如何在CentOS上安装一个2048小游戏
如何在centos上安装一个2048小游戏 最近在学习CentOS系统,就琢磨着玩点什么,然后我看到有人在玩2048小游戏,所有我就在想,为啥不装一个2048小游戏搞一下嘞,于是乎,我就开始工作啦 由 ...
- 纳税服务系统【信息发布管理、Ueditor、异步信息交互】
需求分析 我们现在来到了纳税服务系统的信息发布管理模块,首先我们跟着原型图来进行需求分析把: 一些普通的CRUD,值得一做的就是状态之间的切换了.停用和发布切换. 值得注意的是:在信息内容中,它可以带 ...
- Activiti-02-activiti api
流程引擎API和服务 通过ProcessEngine你可以获取各种服务,它和所有的服务对象都是线程安全的,因此整个整个应用中可以只有一份. ProcessEngine processEngine =P ...
- 鸟哥Linux学习笔记05
1, 文件系统通常会将 权限与属性放置到inode中,至于实际数据则放置到data block块中.另外还有一个超级块(superblock)会记录整个文件系统的整体内容,包括ino ...
- Java中数组的概念
1.什么是二维数组?有几种表达方式?分别是什么? 答:多维数组即数组的数组,即数组的元素也是数组. 例:int[] [] a = {{1},{1,2},{1,2,3}}; 有三种方式 1).int [ ...