Windows Store 开发总结——文件操作
1、读取Isolated Storage
每个Metro程序都有三个文件夹:Local,Roaming,Temp。每个文件夹的访问方法都是相同的.
- Local用于将数据存储在本地,这是程序特定的文件夹.
- Roaming存储的文件可能会用于与其他程序进行同步.
- Temp中的文件,在程序每次启动的时候都有可能被清除.
下面的代码是如何使用它们:
public async void IsolatedStorage()
{
// settings
var _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 content
var _WriteThis = \\"Hello world!\\";
await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis); // acquire file
_File = await _Folder.GetFileAsync(_Name); // read content
var _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"": //以文本的方式写入文件
await FileIO.WriteTextAsync(file,content);
break;
case"": //以bytes的方式写入文件
Encoding encoding = Encoding.UTF8;
byte[] bytes = encoding.GetBytes(content);
await FileIO.WriteBytesAsync(file,bytes);
break;
case"": //以流的方式写入文件
IBuffer buffer = Convert(content); //将string转换成IBuffer类型的
await FileIO.WriteBufferAsync(file,buffer);
break;
}
}
1.3 读取文件中数据
case"": //以文本的方式读取文件 content =await FileIO.ReadTextAsync(file);
break; case"": //以流的方式读取文件 IBuffer buffer = await FileIO.ReadBufferAsync(file);
break;
case"":
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()
{
// settings
var _Path = @"MyFolderMyFile.txt";
var _Folder = Windows.ApplicationModel.Package.Current.InstalledLocation; // acquire file
var _File = await _Folder.GetFileAsync(_Path); // read content
var _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 content
var _WriteThis = "Hello world!";
await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis); // acquire file
try { _File = await _Folder.GetFileAsync(_Name); }
catch (FileNotFoundException) { /* TODO */ } // read content
var _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 / ;
desiredLocation.Y = desiredLocation.Y + element.ActualHeight;
return desiredLocation;
}
Windows Store 开发总结——文件操作的更多相关文章
- Windows 10开发基础——文件、文件夹和库(一)
原文:Windows 10开发基础--文件.文件夹和库(一) 主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和文件夹 先了解一 ...
- Windows phone开发之文件夹与文件操作系列(一)文件夹与文件操作
Windows phone7中文件的存储模式是独立的,即独立存储空间(IsolatedStorage).对文件夹与文件操作,需要借助IsolatedStorageFile类. IsolatedStor ...
- Windows与Linux下文件操作监控的实现
一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...
- Windows App开发之文件与数据
读取文件和目录名 这一节開始我们将陆续看到Windows App是如何操作文件的. 在Windows上读取文件名称.目录名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/目 ...
- Win8.1应用开发之文件操作
在操作文件之前,先相应用的应用功能声明进行设定.用户通过C#(非UI)对win8.1上的文件进行訪问,仅仅能局限于图片,音乐,视频和文档四个目录. 而通过文件选取器则能訪问到整个系统的文件. (一)应 ...
- day08-Python运维开发基础(文件操作与相关函数、函数基础)
1. 文件操作及相关函数 # ### 文件操作 """ fp = open("文件名称",mode=模式,encoding=编码集) fp 文件io对 ...
- Python开发——6.文件操作
一.文件操作 1.文件操作的处理流程 打开文件得到文件句柄并赋值给一个变量====>通过句柄对文件进行分析====>关闭文件 #1. 打开文件,得到文件句柄并赋值给一个变量 f=open( ...
- Android开发4——文件操作模式
一.基本概念 // 上下文对象private Context context; public FileService(Context context){ super(); this.context = ...
- python开发_python文件操作
关于python文件操作的详细说明,大家可以参考:关于python的文件操作 官方API:os-Miscellaneous operating system interfaces 下面是我做的demo ...
随机推荐
- 解决阿里云SLB无法添加https证书的问题
私钥是在Linux中通过下面的openssl命令生成的: openssl req -new -newkey rsa:2048 -nodes -keyout cnblogs.key -out cnblo ...
- jQuery插件之验证控件jquery.validate.js
今天学习一下jQuery.Validate插件,为便于日后翻阅查看和广大博客园园友共享,特记于此. 本博客转载自:jQuery Validate jQuery Validate 插件为表单提供了强大的 ...
- 降龙十八掌之一:(亢龙有悔)SQL Server Profiler和数据库引擎优化顾问
简介 说到Sql的[性能工具]真是强大,SQL Server Profiler的中文意思是SQL Server事件探查,这个到底是做什么用的呢?我们都知道探查的意思大多是和监视有关,其实这个SQL S ...
- [游戏模版7] Win32 最简单贴图
>_<:this is the first using mapping. >_<:There will be introducing how to do: First load ...
- p4 是否能自动merge
总结: 1)如果在copy merge(-at)/auto merge(-am)后修改source branch,则可以自动被copy merge: 2)如果在manual merge后修改sou ...
- C/C++文件操作1
在C语言中,文件操作都是由库函数来完成的. 在本章内将介绍主要的文件操作函数. 文件打开函数fopen fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式 ...
- Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录
应广大服务器客户要求一至反应Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录,出现列表超时的情况,特提供以下解决方案: 1. IIS FTP用户解决方法: 在防火 ...
- Js中的一个日期处理格式化函数
由于在工作中,经常需要对日期进行格式化,不像后端那样,有方便的方法可调用,可以在date的对象prototype中定义一个format方法,见如下 //日期时间原型增加格式化方法 Date.proto ...
- Bootstrap3生成响应式的特价商品展示布局
在线演示 本地下载 在线前端调试地址,大家可以在线自己调试. 在线调试唯一地址:http://www.gbtags.com/gb/debug/fa35e396-0a04-4b73-9bfc-c6334 ...
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...