Windows Store 开发总结——文件操作
1、读取Isolated Storage
每个Metro程序都有三个文件夹:Local,Roaming,Temp。每个文件夹的访问方法都是相同的.
- Local用于将数据存储在本地,这是程序特定的文件夹.
- Roaming存储的文件可能会用于与其他程序进行同步.
- Temp中的文件,在程序每次启动的时候都有可能被清除.
下面的代码是如何使用它们:
public async void IsolatedStorage() {// settingsvar _Name = \\"MyFileName";var _Folder = Windows.Storage.ApplicationData.Current.LocalFolder;var _Option = Windows.Storage.CreationCollisionOption.ReplaceExisting;// create file var _File = await _Folder.CreateFileAsync(_Name, _Option);// write contentvar _WriteThis = \\"Hello world!\\";await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis);// acquire file_File = await _Folder.GetFileAsync(_Name);// read contentvar _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File); }
1.1.在文件夹里创建文件
首先创建一个文件夹,在文件夹里创建文件private async void CreateButton_Click(object sender, RoutedEventArgs e){string name=FileName.Text; //创建文件的名称 folder =ApplicationData.Current.LocalFolder;StorageFolder tempFolder = await folder.CreateFolderAsync("Config",CreationCollisionOption.OpenIfExists);file =await tempFolder.CreateFileAsync(name,CreationCollisionOption.OpenIfExists);}
1.2 向创建好的文件中写入数据
这里介绍三种写入文件的方式private async void WriteButton_Click(object sender, RoutedEventArgs e){ string content = InputTextBox.Text.Trim(); ComboBoxItem item = WriteType.SelectedItem asComboBoxItem; //选择写入的方式string type = item.Tag.ToString();switch (type){ case"1": //以文本的方式写入文件await FileIO.WriteTextAsync(file,content);break;case"2": //以bytes的方式写入文件 Encoding encoding = Encoding.UTF8; byte[] bytes = encoding.GetBytes(content); await FileIO.WriteBytesAsync(file,bytes);break;case"3": //以流的方式写入文件 IBuffer buffer = Convert(content); //将string转换成IBuffer类型的await FileIO.WriteBufferAsync(file,buffer);break;}}
1.3 读取文件中数据
case"1": //以文本的方式读取文件 content =await FileIO.ReadTextAsync(file);
break;case"2": //以流的方式读取文件 IBuffer buffer = await FileIO.ReadBufferAsync(file); break; case"3": content = Convert(buffer);
break;
1.4 string和Ibuffer和Byte[]和Stream相互转换
private IBuffer Convert(string text) //将string转换成IBuffer类型的 { using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream()){using (DataWriter dataWriter = newDataWriter()){dataWriter.WriteString(text); return dataWriter.DetachBuffer();} }} private string Convert(IBuffer buffer) //将IBuffer转换成string类型的 {string text = string.Empty;using (DataReader dataReader=DataReader.FromBuffer(buffer)){text = dataReader.ReadString(buffer.Length);}return text; } private async Task<string> Convert()//从文件中加载字符串 { string text=string.Empty;using (IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read)){using (DataReader dataReader = newDataReader(readStream)){UInt64 size = readStream.Size;if (size <= UInt32.MaxValue){UInt32 numBytesLoaded = await dataReader.LoadAsync((UInt32)size);text = dataReader.ReadString(numBytesLoaded);}}}return text;}
IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);
byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);
Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);
2、读取工程中的文件
如果你想要从你的工程中读取一个资源文件,这个文件大多数情况下是示例数据或者设置等.可能会是XML文件,JSON文件,或者其它格式.能读取吗?当然可以.
注意:工程中的文件是不能进行写操作的。要想对工程中的文件进行写操作,需要将其copy到独立存储中,或者其他地方,然后再进行写操作。
第一步 添加文件到工程中.注意:这是你的文件,你需要处理文件类型.如下图,我添加了一个MyFile.txt文件到MyFolder目录中.
第二步
修改文件的生成操作为内容.并将复制到输出目录修改为始终复制.这将确保文件在程序中.不这样做的话,读取不到文件.
第三步
读取文件内容,代码如下:
private async void ProjectFile() {// settingsvar _Path = @"MyFolderMyFile.txt";var _Folder = Windows.ApplicationModel.Package.Current.InstalledLocation;// acquire filevar _File = await _Folder.GetFileAsync(_Path);// read contentvar _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File); }
3、通过文件选取器(File Picker)读取本地文件
你想要从文档库中读取文件?那么就使用文件选取器来让用户选择文件.
只需要这样做:
为了使用文件选取器,并不需要做特殊的事情。不要对AppXManifest进行任何改变(原因:使用文件选取器是让用户做出选择,只有用户可以选择文件).因此选取器是对其自己能力的一种声明和同意.
下面是使用的代码:
async void LocalFileFromPicker() {// 初始化文件选择器
var _Picker = new FileOpenPicker{ViewMode = PickerViewMode.List,SuggestedStartLocation = PickerLocationId.DocumentsLibrary,};_Picker.FileTypeFilter.Add(“.txt”);//添加选择什么类型的文件// 启动文件选择器
var _File = await _Picker.PickSingleFileAsync();if (_File == null){await new Windows.UI.Popups.MessageDialog("No file").ShowAsync();return;}// 读取文件属性
var _Message = string.Format(\\"File date: {0}\\",(await _File.GetBasicPropertiesAsync()).DateModified);await new Windows.UI.Popups.MessageDialog(_Message).ShowAsync();// 读取选择文件内容
var _Content = await Windows.Storage.FileIO.ReadTextAsync(_File);await new Windows.UI.Popups.MessageDialog(_Content).ShowAsync(); }
在上面的代码中,首先初始化了一个FileOpenPicker.然后调用选取器的PickSingleFileAsync()方法来获取一个StorageFile。接着使用MessageDialog来显示一些详细内容。
4、不通过文件选取器(File Picker)读取本地文件
如果你不想通过文件选取器来读取文件,能做到吗?答案是yes.不过稍微有点复杂,因为需要修改程序的AppXManifest文件,来请求文档库的访问功能.
如下图
将文档库访问勾上.这是你可能注意到了功能Tab标题有个红色的X.这表示有错误.如何修改呢.
需要修改声明Tab里面的文件类型
注意,文件类型的设置不能是*.*
如下图(这里我只访问txt文件,所以只添加.txt)
现在,可以读取文件内容了
下面的代码我创建了一个HelloWorld.txt文件,并进行了读写操作.最后,我将该文件删除
async void LocalFileWithoutPicker() {var _Name = "HelloWorld.txt";var _Folder = KnownFolders.DocumentsLibrary;var _Option = Windows.Storage.CreationCollisionOption.ReplaceExisting;// create file var _File = await _Folder.CreateFileAsync(_Name, _Option);// write contentvar _WriteThis = "Hello world!";await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis);// acquire filetry { _File = await _Folder.GetFileAsync(_Name); }catch (FileNotFoundException) { /* TODO */ }// read contentvar _Content = await FileIO.ReadTextAsync(_File);await new Windows.UI.Popups.MessageDialog(_Content).ShowAsync();await _File.DeleteAsync(); }
面的代码可以很好的运行,那是因为我在AppXManifest文件中声明了从文档库文件夹中读取txt文件的功能.
如果你在manifest中请求了如下功能:文档,图片,音乐,视频等,那么可以在库中枚举出这些文件.需要注意的是返回某个文件夹中的文件将根据manifest中声明的文件类型被自动过滤.
5 打开文件的方式
5.1 是否采用默认关联程序打开文件
/// <summary>/// 是否采用默认关联程序打开文件/// </summary>/// <param name="withPicker"></param>public async void OpenFile( bool withPicker){StorageFolder storageFolder = KnownFolders.DocumentsLibrary;StorageFile file = await storageFolder.CreateFileAsync("网络.pdf", CreationCollisionOption.ReplaceExisting);if (file != null){if (withPicker){//请用户选择打开方式var options = new LauncherOptions { DisplayApplicationPicker = true };options.UI.PreferredPlacement = Placement.Below;await Launcher.LaunchFileAsync(file, options);}else{//直接使用默认关联程序打开await Launcher.LaunchFileAsync(file);}}}
5.2 打开网络文件
string uriToLaunch = @\\"http://www.DevDiv.com\\";// Create a Uri object from a URI string var uri = new Uri(uriToLaunch); // Launch the URI var success = await Windows.System.Launcher.LaunchUriAsync(uri); // Launch a URI.直接打开private async void LaunchUriButton_Click(object sender, RoutedEventArgs e){var uri = new Uri(uriToLaunch);bool success = await Windows.System.Launcher.LaunchUriAsync(uri);}// Launch a URI. Show a warning prompt.显示提醒框private async void LaunchUriWithWarningButton_Click(object sender, RoutedEventArgs e){var uri = new Uri(uriToLaunch);LauncherOptions options = new LauncherOptions();// Configure the warning prompt.options.TreatAsUntrusted = true;bool success = await Launcher.LaunchUriAsync(uri, options);}// Launch a URI. Show an Open With dialog that lets the user chose the handler to use.
//用户选择打开,在你单击控件下面,显示应用列表
private async void LaunchUriOpenWithButton_Click(object sender, RoutedEventArgs e){var uri = new Uri(uriToLaunch);Point openWithPosition = GetOpenWithPosition(this.LaunchUriOpenWithButton);var options = new LauncherOptions();options.DisplayApplicationPicker = true;options.UI.InvocationPoint = openWithPosition;options.UI.PreferredPlacement = Placement.Below;bool success = await Windows.System.Launcher.LaunchUriAsync(uri, options);}// The Open With dialog should be displayed just under the element that triggered it.
//获取控件下边缘的中点
private Windows.Foundation.Point GetOpenWithPosition(FrameworkElement element){Windows.UI.Xaml.Media.GeneralTransform buttonTransform = element.TransformToVisual(null);Point desiredLocation = buttonTransform.TransformPoint(new Point());//获取控件左上角的坐标desiredLocation.X = desiredLocation.X + element.ActualWidth / 2;desiredLocation.Y = desiredLocation.Y + element.ActualHeight;return desiredLocation;}
转载于:https://www.cnblogs.com/fuchongjundream/p/3964120.html
Windows Store 开发总结——文件操作相关推荐
- iphone文件连接smb服务器,实用!三种iPhone与Windows电脑互传文件操作技巧,建议收藏...
如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook.iPad 等设备之间快速传递照片.视频或文件. 遗憾的是 ...
- 记录windows驱动开发inf文件详解
深入学习INF文件 简单来说就是微软为安装硬件驱动所开发的一种脚本.可以用来节拷贝.删除文件,增.删注册表键,更改系统设置. 先看一下这篇文章 Windows系统下INF 详细说明 http://w ...
- Windows App开发之文件与数据
读取文件和文件夹名 这一节开始我们将陆续看到Windows App是怎样操作文件的. 在Windows上读取文件名.文件夹名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/ ...
- microstation添加txt文件_C开发实战-文件操作
文件概述 文件几乎无处不在,主要分为磁盘文件和设备文件,典型的磁盘文件有文本文件和二进制文件,磁盘文件存储在外部存储介质(例如磁盘,硬盘,U盘等等)需要加载到内存中才能使用. 无论是文本文件还是二进制 ...
- 【万里征程——Windows App开发】文件数据——文件选取器
使用文件选取器保存文件 就我个人而言,还是非常喜欢使用文件选取器的,因为能够用自己的代码来调用系统的各种弹框. 在这个示例中,首先在XAML中添加一个Button和一个TextBlock,分别命名为b ...
- Windows 驱动开发头文件wdfchildlist.h
This header is used by wdf. 此头文件用于wdf. Windows Driver Framework wdfchildlist.h contains the followi ...
- Windows Store App 获取文件及文件夹列表
通过使用13.2.1小节给出的方法和属性,不仅可以对用户库中的文件和文件夹进行操作,还可以获取其中所有的文件或者文件夹,比如为了完整地展现整个音乐库,可以获取并列举出音乐库中所有的音乐文件,以便能够在 ...
- halcon的算子清点: Chapter 2-3-4 控制、开发、文件操作
Chapter 2 Control 1.assign功能:为一个控制变量分配一个新值. 2.break 功能:终止循环执行. 3. comment 功能:向程序添加一行注释. 4. contin ...
- 使用Windows的SHFileOperation外壳函数实现文件操作
在Windows的shellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝.删除.移动等,该函数使用起来非常简单,它只有一个指向SHFI ...
最新文章
- 恩布企业即时通讯软件,EntboostChat 1.4.2发布,iOS开源IM
- python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
- div.php织梦自定义表判断不能为空,织梦自定义表单字段为必填项的教程
- 开源矿工README
- spring boot api文档_精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用
- Kubernetes集群部署1
- ubuntu16.04安装mongodb
- 我被房东的由器了 怎么办呀 高手们请帮帮
- 软件及其公司篇--项目管理(七)
- 宝塔面板安装和使用教程(详细)
- 大一线性代数知识点总结
- python的datetime.date日期计算——计算当月第一天、当月最后一天、前月第一天、前月最后一天、次月第一天、次月最后一天、去年的当天日期等
- 编码的奥秘:布莱叶盲文与二元编码
- Camera效果测试-白平衡AWB测试
- 如何计算变量或数据类型所占内存空间的大小
- 怎样从一个手机上安两个不同版本的软件_一部手机上怎么安装两个不同版本的微信?一部手机安装两个不同版本微信的方法...
- 网络存储技术Windows server 2012 (项目五 存储服务器的数据快照计划与故障还原)
- db block gets、consistent gets和physical reads
- 怎样将nest.js项目部署到服务器上
- pilz pnoz s4说明书_Pilz展示PNOZ s4系列常用继电器750134
热门文章
- rpa机器人平台_RPA在财务领域的三大应用场景解析
- css 波纹扩散效果
- php 使用支付宝SDK报错解决
- 微信小程序插件---表单验证篇
- 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法
- mysql plus baomidou_com.baomidou.mybatisplus.core.mapper 不存在
- android banner动画框架,Android Studio Banner轮播图使用
- char* 去除后面几个字符_【算法打卡】去除重复字母
- 网站服务器日志分析,如何进行网站日志分析(理论篇)
- 我的世界中国版服务器无限夜视,我的世界中国版怎么无限夜视_我的世界夜视药水怎么合成_我的世界怎么永久夜视...