windows8 App精要 (1)文件系统

1、读取Isolated Storage

每个Metro程序都有三个文件夹:Local, Roaming,Temp。每个文件夹的访问方法都是相同的.

    Local用于将数据存储在本地,这是程序特定的文件夹.

    Roaming存储的文件可能会用于与其他程序进行同步.

    Temp中的文件,在程序每次启动的时候都有可能被清除.

下面的代码是如何使用它们:

  1. public async void IsolatedStorage()  
  2. {  
  3.     // settings   
  4.     var _Name = "MyFileName";  
  5.     var _Folder = Windows.Storage.ApplicationData.Current.LocalFolder;  
  6.     var _Option = Windows.Storage.CreationCollisionOption.ReplaceExisting;  
  7.   
  8.     // create file    
  9.     var _File = await _Folder.CreateFileAsync(_Name, _Option);  
  10.   
  11.     // write content   
  12.     var _WriteThis = "Hello world!";  
  13.     await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis);  
  14.   
  15.     // acquire file   
  16.     _File = await _Folder.GetFileAsync(_Name);  
  17.   
  18.     // read content   
  19.     var _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File);  
  20. }  
public async void IsolatedStorage()
{
    // settings
    var _Name = "MyFileName";
    var _Folder = Windows.Storage.ApplicationData.Current.LocalFolder;
    var _Option = Windows.Storage.CreationCollisionOption.ReplaceExisting;

    // create file 
    var _File = await _Folder.CreateFileAsync(_Name, _Option);

    // write content
    var _WriteThis = "Hello world!";
    await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis);

    // acquire file
    _File = await _Folder.GetFileAsync(_Name);

    // read content
    var _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File);
}


 

2、读取工程中的文件

如果你想要从你的工程中读取一个资源文件,这个文件大多数情况下是示例数据或者设置等.可能会是XML文件,JSON文件,或者其它格式.能读取吗?当然可以.


第一步

 添加文件到工程中.注意:这是你的文件,你需要处理文件类型.如下图,我添加了一个MyFile.txt文件到MyFolder目录中.



第二步

修改文件的生成操作为内容.并将复制到输出目录修改为始终复制.这将确保文件在程序中.不这样做的话,读取不到文件.


第三步

读取文件内容,代码如下:

  1. private async void ProjectFile()  
  2. {  
  3.     // settings   
  4.     var _Path = @"MyFolder\MyFile.txt";  
  5.     var _Folder = Windows.ApplicationModel.Package.Current.InstalledLocation;  
  6.   
  7.     // acquire file   
  8.     var _File = await _Folder.GetFileAsync(_Path);  
  9.   
  10.     // read content   
  11.     var _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File);  
  12. }  
private async void ProjectFile()
{
    // settings
    var _Path = @"MyFolder\MyFile.txt";
    var _Folder = Windows.ApplicationModel.Package.Current.InstalledLocation;

    // acquire file
    var _File = await _Folder.GetFileAsync(_Path);

    // read content
    var _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File);
}


3、通过文件选取器(File Picker)读取本地文件

你想要从文档库中读取文件?那么就使用文件选取器来让用户选择文件.


只需要这样做:

为了使用文件选取器,并不需要做特殊的事情。不要对AppXManifest进行任何改变(原因:使用文件选取器是让用户做出选择,只有用户可以选择文件).因此选取器是对其自己能力的一种声明和同意.

下面是使用的代码

  1. async void LocalFileFromPicker()  
  2. {  
  3.     // define picker   
  4.     var _Picker = new FileOpenPicker  
  5.     {  
  6.         ViewMode = PickerViewMode.List,  
  7.         SuggestedStartLocation = PickerLocationId.DocumentsLibrary,  
  8.     };  
  9.     _Picker.FileTypeFilter.Add(".txt");  
  10.   
  11.     // let user pick file   
  12.     var _File = await _Picker.PickSingleFileAsync();  
  13.     if (_File == null)  
  14.     {  
  15.         await new Windows.UI.Popups.MessageDialog("No file").ShowAsync();  
  16.         return;  
  17.     }  
  18.   
  19.     // read properties   
  20.     var _Message = string.Format("File date: {0}",  
  21.         (await _File.GetBasicPropertiesAsync()).DateModified);  
  22.     await new Windows.UI.Popups.MessageDialog(_Message).ShowAsync();  
  23.   
  24.     // read content   
  25.     var _Content = await Windows.Storage.FileIO.ReadTextAsync(_File);  
  26.     await new Windows.UI.Popups.MessageDialog(_Content).ShowAsync();  
  27. }  
async void LocalFileFromPicker()
{
    // define picker
    var _Picker = new FileOpenPicker
    {
        ViewMode = PickerViewMode.List,
        SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
    };
    _Picker.FileTypeFilter.Add(".txt");

    // let user pick file
    var _File = await _Picker.PickSingleFileAsync();
    if (_File == null)
    {
        await new Windows.UI.Popups.MessageDialog("No file").ShowAsync();
        return;
    }

    // read properties
    var _Message = string.Format("File date: {0}",
        (await _File.GetBasicPropertiesAsync()).DateModified);
    await new Windows.UI.Popups.MessageDialog(_Message).ShowAsync();

    // read content
    var _Content = await Windows.Storage.FileIO.ReadTextAsync(_File);
    await new Windows.UI.Popups.MessageDialog(_Content).ShowAsync();
}

在上面的代码中,首先初始化了一个FileOpenPicker.然后调用选取器的PickSingleFileAsync()方法来获取一个StorageFile。接着使用MessageDialog来显示一些详细内容。


4、不通过文件选取器(File Picker)读取本地文件

如果你不想通过文件选取器来读取文件,能做到吗?答案是yes.不过稍微有点复杂,因为需要修改程序的AppXManifest文件,来请求文档库的访问功能.

如下图



将文档库访问勾上.这是你可能注意到了功能Tab标题有个红色的X.这表示有错误.如何修改呢.

需要修改声明Tab里面的文件类型

注意,文件类型的设置不能是*.*

如下图(这里我只访问txt文件,所以只添加.txt)



现在,可以读取文件内容了

下面的代码我创建了一个HelloWorld.txt文件,并进行了读写操作.最后,我将该文件删除

  1. async void LocalFileWithoutPicker()  
  2. {  
  3.     var _Name = "HelloWorld.txt";  
  4.     var _Folder = KnownFolders.DocumentsLibrary;  
  5.     var _Option = Windows.Storage.CreationCollisionOption.ReplaceExisting;  
  6.   
  7.     // create file    
  8.     var _File = await _Folder.CreateFileAsync(_Name, _Option);  
  9.   
  10.     // write content   
  11.     var _WriteThis = "Hello world!";  
  12.     await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis);  
  13.   
  14.     // acquire file   
  15.     try { _File = await _Folder.GetFileAsync(_Name); }  
  16.     catch (FileNotFoundException) { /* TODO */ }  
  17.   
  18.     // read content   
  19.     var _Content = await FileIO.ReadTextAsync(_File);  
  20.     await new Windows.UI.Popups.MessageDialog(_Content).ShowAsync();  
  21.   
  22.     await _File.DeleteAsync();  
  23. }  
async void LocalFileWithoutPicker()
{
    var _Name = "HelloWorld.txt";
    var _Folder = KnownFolders.DocumentsLibrary;
    var _Option = Windows.Storage.CreationCollisionOption.ReplaceExisting;

    // create file 
    var _File = await _Folder.CreateFileAsync(_Name, _Option);

    // write content
    var _WriteThis = "Hello world!";
    await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis);

    // acquire file
    try { _File = await _Folder.GetFileAsync(_Name); }
    catch (FileNotFoundException) { /* TODO */ }

    // read content
    var _Content = await FileIO.ReadTextAsync(_File);
    await new Windows.UI.Popups.MessageDialog(_Content).ShowAsync();

    await _File.DeleteAsync();
}

上面的代码可以很好的运行,那是因为我在AppXManifest文件中声明了从文档库文件夹中读取txt文件的功能.
 

Windows 8 Metro Style App中文件操作都包含在Windows.Storage命名空间中,其中包括StorageFolder,StorageFile,FileIO等类库。

文件对象用StorageFile实现,文件头用StorageFolder实现,下面看下具体的用法及各类库下的属性他方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值