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 开发总结——文件操作相关推荐

  1. iphone文件连接smb服务器,实用!三种iPhone与Windows电脑互传文件操作技巧,建议收藏...

    如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook.iPad 等设备之间快速传递照片.视频或文件. 遗憾的是 ...

  2. 记录windows驱动开发inf文件详解

    深入学习INF文件 简单来说就是微软为安装硬件驱动所开发的一种脚本.可以用来节拷贝.删除文件,增.删注册表键,更改系统设置. 先看一下这篇文章 Windows系统下INF 详细说明  http://w ...

  3. Windows App开发之文件与数据

    读取文件和文件夹名 这一节开始我们将陆续看到Windows App是怎样操作文件的. 在Windows上读取文件名.文件夹名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/ ...

  4. microstation添加txt文件_C开发实战-文件操作

    文件概述 文件几乎无处不在,主要分为磁盘文件和设备文件,典型的磁盘文件有文本文件和二进制文件,磁盘文件存储在外部存储介质(例如磁盘,硬盘,U盘等等)需要加载到内存中才能使用. 无论是文本文件还是二进制 ...

  5. 【万里征程——Windows App开发】文件数据——文件选取器

    使用文件选取器保存文件 就我个人而言,还是非常喜欢使用文件选取器的,因为能够用自己的代码来调用系统的各种弹框. 在这个示例中,首先在XAML中添加一个Button和一个TextBlock,分别命名为b ...

  6. Windows 驱动开发头文件wdfchildlist.h

    This header is used by wdf.  此头文件用于wdf. Windows Driver Framework wdfchildlist.h contains the followi ...

  7. Windows Store App 获取文件及文件夹列表

    通过使用13.2.1小节给出的方法和属性,不仅可以对用户库中的文件和文件夹进行操作,还可以获取其中所有的文件或者文件夹,比如为了完整地展现整个音乐库,可以获取并列举出音乐库中所有的音乐文件,以便能够在 ...

  8. halcon的算子清点: Chapter 2-3-4 控制、开发、文件操作

    Chapter 2  Control 1.assign功能:为一个控制变量分配一个新值. 2.break  功能:终止循环执行. 3. comment  功能:向程序添加一行注释. 4. contin ...

  9. 使用Windows的SHFileOperation外壳函数实现文件操作

    在Windows的shellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝.删除.移动等,该函数使用起来非常简单,它只有一个指向SHFI ...

最新文章

  1. 恩布企业即时通讯软件,EntboostChat 1.4.2发布,iOS开源IM
  2. python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
  3. div.php织梦自定义表判断不能为空,织梦自定义表单字段为必填项的教程
  4. 开源矿工README
  5. spring boot api文档_精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用
  6. Kubernetes集群部署1
  7. ubuntu16.04安装mongodb
  8. 我被房东的由器了 怎么办呀 高手们请帮帮
  9. 软件及其公司篇--项目管理(七)
  10. 宝塔面板安装和使用教程(详细)
  11. 大一线性代数知识点总结
  12. python的datetime.date日期计算——计算当月第一天、当月最后一天、前月第一天、前月最后一天、次月第一天、次月最后一天、去年的当天日期等
  13. 编码的奥秘:布莱叶盲文与二元编码
  14. Camera效果测试-白平衡AWB测试
  15. 如何计算变量或数据类型所占内存空间的大小
  16. 怎样从一个手机上安两个不同版本的软件_一部手机上怎么安装两个不同版本的微信?一部手机安装两个不同版本微信的方法...
  17. 网络存储技术Windows server 2012 (项目五 存储服务器的数据快照计划与故障还原)
  18. db block gets、consistent gets和physical reads
  19. 怎样将nest.js项目部署到服务器上
  20. pilz pnoz s4说明书_Pilz展示PNOZ s4系列常用继电器750134

热门文章

  1. rpa机器人平台_RPA在财务领域的三大应用场景解析
  2. css 波纹扩散效果
  3. php 使用支付宝SDK报错解决
  4. 微信小程序插件---表单验证篇
  5. 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法
  6. mysql plus baomidou_com.baomidou.mybatisplus.core.mapper 不存在
  7. android banner动画框架,Android Studio Banner轮播图使用
  8. char* 去除后面几个字符_【算法打卡】去除重复字母
  9. 网站服务器日志分析,如何进行网站日志分析(理论篇)
  10. 我的世界中国版服务器无限夜视,我的世界中国版怎么无限夜视_我的世界夜视药水怎么合成_我的世界怎么永久夜视...