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 ="操作失败!";
            }
        }








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值