Metro Style App开发快速入门 之文件访问操作示例

文件访问操作示例

最近在学习Win 8 Metro Style App的一些示例,接下来我写一下这段时间的学习感想。Win 8的最新版本是Window Consumer Preview 版本。Metro Style App的Demo中用了大量的异步操作。(使用async 和await)。

在Win8中,使用异步操作相当简单,与同步差不多,具体看运行的代码就知道了。

运行示例的环境是: Window 8 Consumer Preview  + Visual studio 11 Beta. 下载地址。 Window 8的安装不在此处介绍。

Metro style App 的Sample下载地址为。  下面是自己的操作后的一些感想:

1 在指定文件夹中创建指定类型的文件

async void CreateFileBtn_Click(object sender, RoutedEventArgs e)
{
    StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
    StorageFile sampleFile = await storageFolder.CreateFileAsync("Sample.txt", CreationCollisionOption.ReplaceExisting);
 
}

 注意:

 A、将Docments Library勾上,这样才能访问C:\Users\userName\Documents文件夹。这里必须勾上,否则程序无法运行,没有访问权限。

Metro Style App开发快速入门 之文件访问操作示例

B、添加文件类型(本例为txt文本文件)。这里我们可以添加文件访问的类型。如果没有将无法访问相关的文件。

Metro Style App开发快速入门 之文件访问操作示例

 

2、写入数据。采用FileIO.WriteTextAsync方法。

void WriteTextToTextFileBtn_Click(object sender, RoutedEventArgs e)
{
    if (sampleFile != null)
    {
        FileIO.WriteTextAsync(sampleFile, "Hello Test! ");
    }
 
}

  读取数据,采用FileIO.ReadTextAsync方法。

async void ReadTextFromTextFileBtn_Click(object sender, RoutedEventArgs e)
  {
      if (sampleFile != null)
      {
          string msg = await FileIO.ReadTextAsync(sampleFile);
      }
  }

 3、 用Bytes向文本写入数据

async void WriteTextUseByteBtn_Click(object sender, RoutedEventArgs e)
{
    if (sampleFile != null)
    {
        string Data = "Hello, world!";
        IBuffer buffer = GetBufferFromString(Data);
        await FileIO.WriteBufferAsync(sampleFile, buffer);
    }
 
 
}
 
IBuffer GetBufferFromString(string str)
{
 
    using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
    {
        using (DataWriter write = new DataWriter(stream))
        {
            write.WriteString(str);
            return write.DetachBuffer();
        }
    }
}

 

 用Byte从文本中读出数据。

async void ReadTesxUseByte_Click(object sender, RoutedEventArgs e)
{
    if (sampleFile != null)
    {
        IBuffer buffer = await FileIO.ReadBufferAsync(sampleFile);
        using (DataReader read = DataReader.FromBuffer(buffer))
        {
            string fileContent =  read.ReadString(buffer.Length);
        }
 
    }
}

 

4、 使用流向文件写入数据。

async void WriteTextUseStreamBtn_Click(object sender, RoutedEventArgs e)
{
    if (sampleFile!=null)
    {
        using (IRandomAccessStream writeStram = await sampleFile.OpenAsync(FileAccessMode.ReadWrite))
        {
            using (DataWriter dataWrite = new DataWriter(writeStram))
            {
                dataWrite.WriteString("Write Stream Text!");
                await dataWrite.StoreAsync();
                await dataWrite.FlushAsync();
            }
        }
    }
}

 

 

使用流向文件read数据。

async void ReadFromStreamBtn_Click(object sender, RoutedEventArgs e)
{
    if (sampleFile!=null)
    {
        using (IRandomAccessStream readSteam = await sampleFile.OpenAsync(FileAccessMode.Read))
        {
            using (DataReader dataReader = new DataReader(readSteam))
            {
                uint numByteLoaded = await dataReader.LoadAsync((uint)readSteam.Size);
                string fileContent = dataReader.ReadString(numByteLoaded);
                 
            }
        }
    }
}

 

 5、  拷贝文件。采用CopyAsync方法。

async void CopyFileBtn_Click(object sender, RoutedEventArgs e)
{
    if (sampleFile!=null)
    {
        StorageFile sampleFileCopy = await sampleFile.CopyAsync(KnownFolders.DocumentsLibrary, "sample-copy.txt", NameCollisionOption.ReplaceExisting);
    }
}

 

6、 删除文件,采用DeleteAsync方法。

async void DeleteFileBtn_Click(object sender, RoutedEventArgs e)
 {
     if (sampleFile!=null)
     {
         await sampleFile.DeleteAsync();
         sampleFile = null;
     }
 }

 

 总结:现在Windows 8 只是预览版,所以在发布之前可能会改变,但是我觉得基本思想应该是一样的。


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/03/12/2391987.html,如需转载请自行联系原作者