Win8 Metro中文件读写删除与复制操作
Win8Metro中,我们不能在向以前那样调用WIN32的API函数来进行文件操作,因此,下面就来介绍一下Win8 Metro中文件的读写操作。
1 Windows 8 Metro Style App中文件的操作都包含在Windows.Storage命名空间中,其中
包括StorageFolder,StorageFile,FileIO等类库
。
2 Win8文件的读写操作都是
异步方式进行的,因此要使用async
3 创建文件:
StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting);
这里我们创建了一个1.txt的文档,如果已经存在这个文档,那么新建的文档将替换,覆盖掉旧文档。
由于文档读写是异步方式操作,因此,我们要将它放到async修饰的函数里才可以使用,具体如下:
private async void SelectImageOne(byt[] outArary)
{
StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting);
await FileIO.WriteBytesAsync(storageFile, outArary);
}
在上述的代码中,参数是我们要写入到文件“1.txt”里的内容,这里是一个byte[]数组。
4 写入文件:
如3中的代码所示await FileIO.WriteBytesAsync(storageFile, outArary);
写入文件的方法是FileIO中的write方法,这里一共有以下四种方法:
WriteBufferAsync(Windows.Storage.IStorageFile file, IBuffer buffer);
WriteBytesAsync(Windows.Storage.IStorageFile file, byte[] buffer);
WriteLinesAsync(Windows.Storage.IStorageFile file, IEnumerable<string> lines); WriteLinesAsync(Windows.Storage.IStorageFile file, IEnumerable<string> lines, UnicodeEncoding encoding);
WriteTextAsync(Windows.Storage.IStorageFile file, string contents);
WriteTextAsync(Windows.Storage.IStorageFile file, string contents,
UnicodeEncoding encoding);
这里我们列举的是写入byte[]的方法。
5 打开文件:
StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption. OpenIfExists);
这里我们打开了一个名字为”1.txt”的文本文件。
6 读取文件:
在FileIO中有三种文件读取方法,分别读取不同的文件:
await FileIO.ReadTextAsync(Windows.Storage.IStorageFile file);
await FileIO.ReadTextAsync(Windows.Storage.IStorageFile file, UnicodeEncoding encoding);//返回指定的文本编码格式
await FileIO. ReadBufferAsync (Windows.Storage.IStorageFile file);
await FileIO. ReadLinesAsync (Windows.Storage.IStorageFile file);
await FileIO. ReadLinesAsync (Windows.Storage.IStorageFile file, UnicodeEncoding encoding);
这里我们以文本为例:
string fileIContent = await FileIO. ReadTextAsync (storageFile);
这样我们就返回了一个string文本。
我们也可以通过流来读取文件:
IBuffer buffer = await FileIO.ReadBufferAsync(storageFile); using (DataReader dataReader = DataReader.FromBuffer(buffer)) {
string fileContent = dataReader.ReadString (buffer.Length); } 7 IBuffer, byte[], Stream之间的相互转换: StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption. OpenIfExists);
IBuffer buffer = await FileIO.ReadBufferAsync(storageFile); byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length); Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer); 另外一个实例:
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);
}
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;
}
}
3.读取刚才写入文件里的数据,这里也介绍三种读取文件的方式
private async void ReadButton_Click(object sender, RoutedEventArgs e)
{
ComboBoxItem item = ReadType.SelectedItem asComboBoxItem;
string type = item.Tag.ToString();
string content = string.Empty;
switch (type)
{
case"1": //以文本的方式读取文件
content =await FileIO.ReadTextAsync(file);
break;
case"2": //以流的方式读取文件
IBuffer buffer = await FileIO.ReadBufferAsync(file);
content = Convert(buffer);
break;
case"3":
content =await Convert();
break;
}
ShowTextBox.Text = content;
}
private IBuffer Convert(string text) //将string转换成IBuffer类型的
{
using (InMemoryRandomAccessStream stream = newInMemoryRandomAccessStream())
{
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;
}
4.读取文件的属性
private async void ReadPropertyButton_Click(object sender, RoutedEventArgs e)
{
ComboBoxItem item = Files.SelectedItem asComboBoxItem;
string name = item.Content.ToString();
StorageFolder tempFolder =await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync("Config");
if (tempFolder != null)
{
file =await tempFolder.GetFileAsync(name);
if (file != null)
{
StringBuilder builder = newStringBuilder();
builder.AppendLine("文件名称:"+file.Name);
builder.AppendLine("文件类型:"+file.FileType);
BasicProperties basic = await file.GetBasicPropertiesAsync();
builder.AppendLine("文件大小:"+basic.Size+"bytes");
builder.AppendLine("上次修改时间:"+basic.DateModified);
builder.AppendLine("文件路径:"+file.Path);
List<string> list = newList<string>();
list.Add("System.DateAccessed");
list.Add("System.FileOwner");
IDictionary<string, object> extra = await file.Properties.RetrievePropertiesAsync(list);
var property = extra["System.DateAccessed"];
if (property != null)
{
builder.AppendLine("文件创建时间:"+property);
}
property = extra["System.FileOwner"];
if(property!=null)
{
builder.AppendLine("文件所有者:"+property);
}
DisplyProperty.Text = builder.ToString();
}
}
}
5.复制删除文件
private async void OKButton_Click(object sender, RoutedEventArgs e)
{
try
{
ComboBoxItem item=FilesList.SelectedItem asComboBoxItem;
string fileName = item.Content.ToString(); //获得选中的文件名称
int index=fileName.IndexOf('.');
string firstName = fileName.Substring(0,index);
string type = fileName.Substring(index);
StorageFolder tempFolder = await folder.GetFolderAsync("Config"); //文件在Config文件夹下放置着
file =await tempFolder.GetFileAsync(fileName);
if (file == null)
{
Msg.Text ="文件不存在!";
return;
}
if (CopyoButton.IsChecked.Value) //判断进行复制还是删除
{
StorageFile copy = await file.CopyAsync(tempFolder,firstName+"复制"+type,NameCollisionOption.ReplaceExisting);
Msg.Text ="复制成功!!!";
}
else
{
await file.DeleteAsync();
Msg.Text ="删除成功!!!";
}
}
catch
{
Msg.Text ="操作失败!";
}
}
Win8 Metro中文件读写删除与复制操作的更多相关文章
- [WinAPI] API 9 [文件的删除、复制和移动功能]
Windows系统为文件的删除.复制.重命名或移动文件提供了相应的API函数.删除文件使用DeleteFile函数:复制文件使用CopyFile函数:重命名文件和移动文件实际是一个操作,使用MoveF ...
- C++中文件读写的操作
在C++中读读写文件一般指的就是磁盘中的文本文件和二进制文件: 文本文件:以字符序列组成的文件 二进制文件:由二进制组成的文件 读写文件采用ofstream和ifstream文件流,两者可用头文件&l ...
- python中文件读写
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- 快速入门Python中文件读写IO是如何来操作外部数据的?
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- 使用 windows 批处理指令(BAT文件)进行文件删除、复制操作
以下是做文件删除和复制的批处理指令 ::替换文件需要添加 /y 参数才能直接替换.不然会出现提示是否替换. ::复制Axis2Implementation和WebServices编译后的文件到tomc ...
- Python基础笔记系列十一:标准输入输出、文件读写和指针等操作
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeRE ...
- C和C++中文件读写的区别
C中采用的主要是文件指针的办法,C++中对文件的操作主要运用了“文件流”(即非标准的输入输出)的思想 eg1": #include<stdio.h> //... FILE* fp ...
- (原)Eclipse的java中文件读写
1 在<uses-sdk…/>下面添加permission <uses-sdk android:minSdkVersion="16" android:target ...
- Python中文件读写之 w+ 与 r+ 到底有啥区别?
其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码,只读时 f = open("test.txt&q ...
随机推荐
- Linux操作命令(五)
find . -name ”*.c" -exec ./command.sh {} \; 本次实验将介绍 Linux 命令中 find 和 xargs 命令的用法. find xargs 1. ...
- Linux命令之locate
locate [选项] [pattern] 在mlocate数据库中搜索条目.配合数据库缓存快速查看文件相关位置. locate命令和find -name功能差不多,但是比find搜索要快.因为fin ...
- 【记忆化搜索】codevs2823锁妖塔
[codevs2823]锁妖塔 Description 琐妖塔会在一会儿后倒塌.大量妖魔涌出塔去,塔内的楼梯都挤满了人(哦,错了,是妖),(那他们怎么不飞下去--)要求是,景天一行一定要下塔,琐妖塔一 ...
- 【构造】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) A. Bear and Different Names
如果某个位置i是Y,直接直到i+m-1为止填上新的数字. 如果是N,直接把a[i+m-1]填和a[i]相同即可,这样不影响其他段的答案. 当然如果前面没有过Y的话,都填上0就行了. #include& ...
- 简单的INI解析封装
简单封装的一个ini解析处理类(支持跨平台).支持功能: 加载并解析指定ini文件中的配置: 读取指定 section 下的指定 key 的值.提示:支持按数值型读取,或按文本类型读取:使用示例: a ...
- 十. 图形界面(GUI)设计14.键盘事件
键盘事件的事件源一般丐组件相关,当一个组件处于激活状态时,按下.释放或敲击键盘上的某个键时就会发生键盘事件.键盘事件的接口是KeyListener,注册键盘事件监视器的方法是addKeyListene ...
- DoTA与人生
一个dota菜鸟的人生感悟 接触Dota有了快3年之久,3年里可以经历很多东西,经历了很多东西之后就会有很多的感悟,有些感悟抽象的表达不出来,但是借助于dota,可以间接 ...
- [转]MySQL与Oracle的语法区别详细对比
Oracle和mysql的一些简单命令对比 1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_c ...
- OpenVPN记住账号密码自动连接
说明:在增加了证书+账号密码之后,安全性确实提高了,但是面临的问题也有,每次重启时必须输入账号密码才能连接,这也造成了无人值守的问题. 解决: 1.在Client的client.ovpn末尾添加一行a ...
- OpenVPN官方资源下载和官方教程入口
官方资源: https://openvpn.net/index.php/open-source/downloads.html 2.4.4版本下载:(链接: https://pan.baidu.com/ ...