博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Metro Style App开发快速入门 之文件访问操作示例
阅读量:5774 次
发布时间:2019-06-18

本文共 3257 字,大约阅读时间需要 10 分钟。

文件访问操作示例

最近在学习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文件夹。这里必须勾上,否则程序无法运行,没有访问权限。

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

 

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,如需转载请自行联系原作者

你可能感兴趣的文章
单例模式
查看>>
使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞
查看>>
老旧的金融机构,是时候赶赶云计算的时髦了
查看>>
晶澳向埃及11MW混合发电项目供应光伏组件
查看>>
国产x86 CPU性能达Intel的80%?
查看>>
用友网络陈强兵:企业互联网需解决五大问题
查看>>
SMA推出Powerwall兼容Sunny Boy Storage逆变器
查看>>
云路由 vyatta 体验(二)NAT
查看>>
C++、Java、JavaScript中迭代器的用法
查看>>
jackson not marked as ignorable异常
查看>>
Python version 2.7 required, which was not foun...
查看>>
android 模拟器 横竖屏切换
查看>>
centos7.3 下安装 composer,解决Failed to decode zlib stream错误
查看>>
Git 常用命令
查看>>
在Postgres 数据库中生成36位的UUID代码
查看>>
小黑小波比.功能测试登录用户
查看>>
Java enum用法详解
查看>>
去云端的多条途径
查看>>
Docker容器从一知半解到入门
查看>>
关于“方法参数”
查看>>