西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发其它知识 → Win8 Metro中文件读写删除与复制操作

Win8 Metro中文件读写删除与复制操作

前往专题相关软件相关文章发表评论 来源:西西整理时间:2012/12/17 22:12:05字体大小:A-A+

作者:西西点击:2次评论:0次标签: 文件读写

  • 类型:系统其它大小:221KB语言:中文 评分:10.0
  • 标签:
立即下载

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(byte[]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 ="操作失败!";

            }

        }

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)
    推荐文章

    没有数据