博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win8 Metro中文件读写删除与复制操作
阅读量:6255 次
发布时间:2019-06-22

本文共 9022 字,大约阅读时间需要 30 分钟。

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
lines);WriteLinesAsync(Windows.Storage.IStorageFile file, IEnumerable
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
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
list = newList
();      list.Add("System.DateAccessed");      list.Add("System.FileOwner");             IDictionary
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 ="操作失败!"; } }

 

 

转载地址:http://eynsa.baihongyu.com/

你可能感兴趣的文章
linux下文件的一些文件颜色的含义
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
如何花更少的时间学习更多的知识
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
升级fedora 18到fedora 19
查看>>
【代码小记】无
查看>>
BarTender 2016表单中的“秤显示”控件
查看>>
11月20日学习内容整理:jquery插件
查看>>
Arduino入门之前
查看>>
Redis客户端集群
查看>>
javascript基础篇:函数
查看>>
SVN与TortoiseSVN实战:补丁详解
查看>>
java一些面试题
查看>>
干货型up主
查看>>
获取页面中所有dropdownlist类型控件
查看>>
读《淘宝数据魔方技术架构解析》有感
查看>>
rm 命令(转)
查看>>
[禅悟人生]真知从实践中来
查看>>
Chrome 报 Resource interpreted as Script but transferred with MIME type text/plain 警告的解决办法...
查看>>
memcpy的使用方法总结
查看>>