WinRT文件系统

WinRT和苹果的AppStore的新政策一样,也是一个沙箱环境,应用程序获得的权限十分有限。这虽然提高了程序的安全性,但是也妨碍了一些系统底层功能的开发,降低了用户体验。

测试代码下载 

WinRT中文件系统也被限制在了库中,这是Windows 7首次引入的类似于我的文档的目录结构,可以管理用户常用的文档、图片、音乐、视频等。

目前只能访问系统内置的几个库:文档、音乐、图片、视频,自定义的库我没有找到访问的方法。若想访问其他文件需要使用FilePicker、FolderPick等对话框,后续再来测试。

以文档库为例,测试一下文件系统。

大多数文件系统的API都位于Windows.Storage命名空间:

 

1、枚举目录中的顶层目录:

Windows.Storage.StorageFolder __doc = Windows.Storage.KnownFolders.DocumentsLibrary;

 

//枚举目录中的顶层目录

foreach (Windows.Storage.StorageFolder __folder in await __doc.GetFoldersAsync())

{

    this.txtFolder.Text += __folder.Name + "\n";

}

GetFoldersAsync()没有递归的重载版本,若想要获取所有子目录,则需要写一个递归函数。

 

2、枚举目录中的顶层文件:

foreach (Windows.Storage.StorageFile __file in await __doc.GetFilesAsync())

{

    this.txtFile.Text += __file.Name + "\n";

}

同上GetFilesAsync()也没有重载版本。

 

3、创建文件,若存在则覆盖:

await __doc.CreateFileAsync("Test.txt", Windows.Storage.CreationCollisionOption.ReplaceExisting);

 

4、创建目录,若存在则覆盖:

await __doc.CreateFolderAsync("Test", Windows.Storage.CreationCollisionOption.ReplaceExisting);

 

5、复制文件:

StorageFile __f = await __doc.GetFileAsync("Test.txt");

StorageFolder __fo = await __doc.GetFolderAsync("Test");

await __f.CopyAsync(__fo, "NewTest.txt", NameCollisionOption.ReplaceExisting);

await __f.CopyAndReplaceAsync(__f);

目录没有提供Copy方法,需要手动处理,先创建空目录,然后递归创建子目录、子文件。

 

6、重命名文件:

await __f.RenameAsync("NewTest.txt", NameCollisionOption.ReplaceExisting);

 

7、重命名目录:

await __fo.RenameAsync("NewTest", NameCollisionOption.ReplaceExisting);

 

8、剪切文件:

await __f.MoveAsync(__fo, "NewTest.txt", NameCollisionOption.ReplaceExisting);

目录没有提供剪切方法,也需要手动处理。

 

9、向文件中写入文本:

await FileIO.WriteTextAsync(__f, "写入文本");

FileIO是一个静态类,可以对指定文件进行操作。类似还有一个PathIO,针对指定绝对路径的文件或目录进行操作。

 

10、通过字节写入文件:

IBuffer __buffer = GetBufferFromString("通过字节写入");

await FileIO.WriteBufferAsync(__f, __buffer);

 

11、获取文件流:

IRandomAccessStream __stream = await __f.OpenAsync(FileAccessMode.ReadWriteNoCopyOnWrite);

 

12、删除文件,直接删除,不放进回收站:

await __f.DeleteAsync(StorageDeleteOption.PermanentDelete);

 

13、删除目录,直接删除,不放进回收站:

await __fo.DeleteAsync(StorageDeleteOption.PermanentDelete);

注意只能删除空目录,若目录中还有子目录或文件,则需要先删除子文件,需要递归删除。

posted @ 2012-05-12 18:11 徐州瑞步科技 阅读(...) 评论(...) 编辑 收藏