zoukankan      html  css  js  c++  java
  • 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 ="操作失败!";
                }
            }








  • 相关阅读:
    C++中dynamic_cas操作符的工作原理
    wcf服务契约的重载
    db2学习笔记
    微软新特性下的异常处理
    任务取消TASK
    socket多文件发送(压缩,解压)
    oracle 表分区例子
    Task构造
    TASK 的使用
    Asp.Net 用户验证(自定义IPrincipal和IIdentity)
  • 原文地址:https://www.cnblogs.com/james1207/p/3260437.html
Copyright © 2011-2022 走看看