在localFolder中写入文件特定的文件夹

时间:2013-01-27 02:06:08

标签: windows-8 visual-studio-2012 winjs

我正在尝试将图像文件写入localFolder存储。我想将它专门写入localFolder中的images/heroes/文件夹。有没有办法用我现有的代码做到这一点?

return WinJS.xhr({ url: fileToDownloadURL, responseType: 'blob' }).then(
   function (response) {
      var input = response.response.msDetachStream();
      var filename = 'ms-appx:///local/images/heroes/image_name.png';

      Windows.Storage.ApplicationData.current.localFolder.createFileAsync(filename,
      Windows.Storage.CreationCollisionOption.replaceExisting).then(
         function (file) {
            return file.openAsync(Windows.Storage.FileAccessMode.readWrite).then(
               function (output) {
                  return Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output).then(
                     function () {
                        output.flushAsync().then(function () {
                           input.close();
                           output.close();
                     });
                });
          });
     }
   }
)};

我收到此错误消息:

0x8007007b - JavaScript runtime error: The filename, directory name, or volume label syntax is incorrect.

WinRT information: The specified name (ms-appx:///local/images/heroes/image_name.png) contains one or more invalid characters.

1 个答案:

答案 0 :(得分:5)

我明白了。对于任何想知道的人,你可以致电

getFolderAsync('SomeFolderName')

来自

Windows.Storage.ApplicationData.current.localFolder

实例。 getFolderAsync()与任何promise函数类似,如果文件夹不存在,将返回错误。从那里你可以运行

createFolderAsync('SomeFolderName')

创建文件夹,然后继续你正在做的事情。在我的情况下,最好创建一个像writeFileAsync()这样的函数,然后根据文件夹是否存在来调用它。

请记住getFolderAsync()一次只能获得一个文件夹,例如

getFolderAsync('along/list/of/folders')

不起作用。你必须将getFolderAsync()个电话连在一起,我相信(如果我错了,请纠正我!)。