西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)其它知識(shí) → Win8 Metro中文件讀寫刪除與復(fù)制操作

Win8 Metro中文件讀寫刪除與復(fù)制操作

前往專題相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2012/12/17 22:12:05字體大。A-A+

作者:西西點(diǎn)擊:2次評(píng)論:0次標(biāo)簽: 文件讀寫

  • 類型:系統(tǒng)其它大小:221KB語言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載

Win8Metro中,我們不能在向以前那樣調(diào)用WIN32的API函數(shù)來進(jìn)行文件操作,因此,下面就來介紹一下Win8 Metro中文件的讀寫操作。

1 Windows 8 Metro Style App中文件的操作都包含在Windows.Storage命名空間中,其中包括StorageFolder,StorageFile,FileIO等類庫。

2 Win8文件的讀寫操作都是異步方式進(jìn)行的,因此要使用async

3 創(chuàng)建文件:

StorageFile storageFile=await

Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting);
這里我們創(chuàng)建了一個(gè)1.txt的文檔,如果已經(jīng)存在這個(gè)文檔,那么新建的文檔將替換,覆蓋掉舊文檔。

由于文檔讀寫是異步方式操作,因此,我們要將它放到async修飾的函數(shù)里才可以使用,具體如下:
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);

}

在上述的代碼中,參數(shù)是我們要寫入到文件“1.txt”里的內(nèi)容,這里是一個(gè)byte[]數(shù)組。

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);
這里我們打開了一個(gè)名字為”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);
這樣我們就返回了一個(gè)string文本。
我們也可以通過流來讀取文件:
IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);

using (DataReader dataReader = DataReader.FromBuffer(buffer))

{
string fileContent = dataReader.ReadString (buffer.Length);

}

7 IBuffer, byte[], Stream之間的相互轉(zhuǎn)換:

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);

另外一個(gè)實(shí)例:

1.首先創(chuàng)建一個(gè)文件夾,在文件夾里創(chuàng)建文件

   private async void CreateButton_Click(object sender, RoutedEventArgs e)

        {

    string name=FileName.Text;  //創(chuàng)建文件的名稱

    folder =ApplicationData.Current.LocalFolder;

    StorageFolder tempFolder = await folder.CreateFolderAsync("Config",CreationCollisionOption.OpenIfExists);

            file =await tempFolder.CreateFileAsync(name,CreationCollisionOption.OpenIfExists);

        }

2.在創(chuàng)建好的文件里,寫入我們的數(shù)據(jù),這里介紹三種寫入文件的方式

  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轉(zhuǎn)換成IBuffer類型的

              await FileIO.WriteBufferAsync(file,buffer);

              break;

            }

        }     

3.讀取剛才寫入文件里的數(shù)據(jù),這里也介紹三種讀取文件的方式

   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轉(zhuǎn)換成IBuffer類型的

        {       

      using (InMemoryRandomAccessStream stream = newInMemoryRandomAccessStream())

               {

        using (DataWriter dataWriter = newDataWriter())

                  {

                        dataWriter.Writestring(text);                 

            return dataWriter.DetachBuffer();

                  }               

            }

        }

    private string Convert(IBuffer buffer)    //將IBuffer轉(zhuǎn)換成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("上次修改時(shí)間:"+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("文件創(chuàng)建時(shí)間:"+property);

                        }

                        property = extra["System.FileOwner"];                  

           if(property!=null)

                        {

                              builder.AppendLine("文件所有者:"+property);

                        }

                        DisplyProperty.Text = builder.ToString();

                }

            }

        }

5.復(fù)制刪除文件  

      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) //判斷進(jìn)行復(fù)制還是刪除

                {                  

         StorageFile copy = await file.CopyAsync(tempFolder,firstName+"復(fù)制"+type,NameCollisionOption.ReplaceExisting);

                      Msg.Text ="復(fù)制成功。!";

                }       

      else

                {

        await file.DeleteAsync();

                     Msg.Text ="刪除成功!!";

                }

            }

      catch

            {

                Msg.Text ="操作失敗!";

            }

        }

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)