Windows Store 开发总结——文件操作

1、读取Isolated Storage

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

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

  • Roaming存储的文件可能会用于与其他程序进行同步.
  • Temp中的文件,在程序每次启动的时候都有可能被清除.

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

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

1.1.在文件夹里创建文件

    首先创建一个文件夹,在文件夹里创建文件

   private async void CreateButton_Click(object sender, RoutedEventArgs e)

        {

    string name=FileName.Text;  //创建文件的名称

    folder =ApplicationData.Current.LocalFolder;

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

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

        }

1.2 向创建好的文件中写入数据

这里介绍三种写入文件的方式

  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转换成IBuffer类型的

              await FileIO.WriteBufferAsync(file,buffer);

              break;

            }

        }

1.3 读取文件中数据

case"1":  //以文本的方式读取文件

content =await FileIO.ReadTextAsync(file);
break;

case"2": //以流的方式读取文件

IBuffer buffer = await FileIO.ReadBufferAsync(file);
break;
case"3":
content = Convert(buffer); 
break;

1.4 string和Ibuffer和Byte[]和Stream相互转换

private IBuffer Convert(string text)  //将string转换成IBuffer类型的
   {
      using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())

               {
      using (DataWriter dataWriter = newDataWriter())

                  {
                        dataWriter.WriteString(text);
                                   return dataWriter.DetachBuffer();

                  }
              }

 }
private string Convert(IBuffer buffer)    //将IBuffer转换成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;

  }

IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);

byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);

Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);

2、读取工程中的文件

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

注意:工程中的文件是不能进行写操作的。要想对工程中的文件进行写操作,需要将其copy到独立存储中,或者其他地方,然后再进行写操作。

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

第二步

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

第三步

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

private async void ProjectFile()
{
    // settings
    var _Path = @"MyFolderMyFile.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进行任何改变(原因:使用文件选取器是让用户做出选择,只有用户可以选择文件).因此选取器是对其自己能力的一种声明和同意.

下面是使用的代码:

async void LocalFileFromPicker()
{
    // 初始化文件选择器
    var _Picker = new FileOpenPicker
    {
        ViewMode = PickerViewMode.List,
        SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
    };
    _Picker.FileTypeFilter.Add(“.txt”);//添加选择什么类型的文件
    // 启动文件选择器
    var _File = await _Picker.PickSingleFileAsync();
    if (_File == null)
    {
        await new Windows.UI.Popups.MessageDialog("No file").ShowAsync();
        return;
    }

    // 读取文件属性
    var _Message = string.Format(\\"File date: {0}\\",
        (await _File.GetBasicPropertiesAsync()).DateModified);
    await new Windows.UI.Popups.MessageDialog(_Message).ShowAsync();

    // 读取选择文件内容
    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文件,并进行了读写操作.最后,我将该文件删除

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文件的功能.

如果你在manifest中请求了如下功能:文档,图片,音乐,视频等,那么可以在库中枚举出这些文件.需要注意的是返回某个文件夹中的文件将根据manifest中声明的文件类型被自动过滤.

时间: 2024-10-09 22:33:56

Windows Store 开发总结——文件操作的相关文章

【万里征程——Windows App开发】文件操作——读取文件

在上一节中我们学习了数据绑定,因为我个人对上一篇还是比较满意的,至少相对于前面的那些而言(我也知道前面写的太差了,后面还会继续修改的,博客也像软件一样嘛).这一节开始我们将陆续看到Windows App是怎样操作文件的. 在Windows上读取文件名.文件夹名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/文件夹名的过程写在前者的click事件中,后者则用来显示文件信息. <Grid Background="{ThemeResource ApplicationP

Windows phone开发之文件夹与文件操作系列(一)文件夹与文件操作

Windows phone7中文件的存储模式是独立的,即独立存储空间(IsolatedStorage).对文件夹与文件操作,需要借助IsolatedStorageFile类. IsolatedStorageFile提供了对独立存储的空间获取,文件夹的删除.移动,文件的创建.删除等IO操作. 在Windows phone7中对文件的操作,都需要引入命名空间System.IO.IsolatedStorage和System.IO. 在System.IO.IsolatedStorage 命名空间下有以下

【大话QT之五】Windows与Linux下文件操作监控的实现

一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场上网盘实现有一些的不同,主要在客户端与服务器端的操作需要双向进行,即:用户在客户端的操作需要及时同步到服务器端:在服务器端作业渲染生成的文件要及时同步到客户端.即:用户不在需要单独的下载数据,而是在作业运行的同时,渲染就过就会自动同步到客户端,大大缩短了等待时间.当然,无论是在客户端还是在服务端都面

Windows App开发之文件与数据

读取文件和目录名 这一节開始我们将陆续看到Windows App是如何操作文件的. 在Windows上读取文件名称.目录名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/目录名的过程写在前者的click事件中.后者则用来显示文件信息. <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <StackPanel Orientation="Ho

Windows与Linux下文件操作监控的实现

一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场上网盘实现有一些的不同,主要在客户端与服务器端的操作需要双向进行,即:用户在客户端的操作需要及时同步到服务器端:在服务器端作业渲染生成的文件要及时同步到客户端.即:用户不在需要单独的下载数据,而是在作业运行的同时,渲染就过就会自动同步到客户端,大大缩短了等待时间.当然,无论是在客户端还是在服务端都面

Win8.1应用开发之文件操作

在操作文件之前,先相应用的应用功能声明进行设定.用户通过C#(非UI)对win8.1上的文件进行訪问,仅仅能局限于图片,音乐,视频和文档四个目录. 而通过文件选取器则能訪问到整个系统的文件. (一)应用功能声明 对于win8应用商店应用,打开Package.appxmanifest文件.点击"功能"选项卡,勾选"音乐库","图片库"和"视频库",这样你就能够通过代码对这里面的文件和目录进行操作: 音乐 musicLibrary

【万里征程——Windows App开发】文件选取器

使用文件选取器保存文件 就我个人而言,还是非常喜欢使用文件选取器的,因为能够用自己的代码来调用系统的各种弹框. 在这个示例中,首先在XAML中添加一个Button和一个TextBlock,分别命名为btnSaveFile和tBlockSaveInfo.对于这个保存文件这个操作在后台的Click事件中就可以轻易完成了. private async void btnSaveFile_Click(object sender, RoutedEventArgs e) { FileSavePicker sa

Python全栈开发之文件操作

No.1 文件的概念 文件的概念和作用 计算机中的文件,就是存储在某种长期储存设备上的一段数据流 计算机中的文件,可以在需要的时候使用 文件的存储方式 文本文件 可以使用文本编辑器查看 本质上还是二进制文件 二进制文件 保留的内容不能直接查看,而是提供给其他软件查看 图片.音频.视频等都是二进制文件 No.2 文件的基本操作 操作文件的基本套路 打开文件 读写文件 关闭文件 操作文件的函数 函数 说明 fp.read([size]) size为读取的长度,以byte为单位 fp.readline

Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法

catalog 0. 引言 1. Linux平台上涉及的File IO操作 2. Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件IO操作时,可能遇到的错误,及其解决方法,主机安全攻防产品除了需要将安全攻防上的领域知识固化到程序实现上之外,还极度依赖关联系统本身.编程语言库的特性,原则上,并不是所有的安全需求都能100%地落实到程序设计中,这需要我们对操作系统.编程语言本身具有较深的理解 Relevant Link: h