FileSystem APIのローカルファイルはどこに保存されているか?

先月のエントリで、FileSystem APIJavaScriptからローカルストレージへの保存、読み込みを行う方法をまとめましたが、保存されたデータはPCのどこに保存されるのか?がわからないままだったので調べてみました。

保存されたデータはPCのどこに保存されるのか?

FileSystem API について知る - HTML5 Rocksによると、

FileSystem API を使用すると、ユーザーのローカル ファイル システムのサンドボックス化されたセクションの作成、読み取り、ナビゲート、書き込みをウェブ アプリケーションから行うことができます。

サンドボックス化とは。。。Wikipediaによりますと

サンドボックス(sandbox)とは、外部から受け取ったプログラムを保護された領域で動作させることによってシステムが不正に操作されるのを防ぐセキュリティモデルのこと。
実行されるプログラムは保護された領域に入り、ほかのプログラムやデータなどを操作できない状態にされて動作するため、プログラムが暴走したりウイルスを動作させようとしてもシステムに影響が及ばないようになっている。

とのこと。セキュリティ上問題になりそうなユーザが普段使用するフォルダにはファイルは保存されてなさそうです。

ファイル名で探してみる

以前のエントリでのファイル書き込み処理

function requestFS(grantedBytes) {
  window.webkitRequestFileSystem(window.PERSISTENT, grantedBytes, onInitFs, onError);
}

function onInitFs(fs) {
  // getFile の第2引数で「create: true」を付けるとファイルを新規作成する。
  fs.root.getFile('log.txt', {create: true, exclusive: true}, function(fileEntry) {
    console.log(fileEntry.isFile); // true
    console.log(fileEntry.name); // log.txt 
    console.log(fileEntry.fullPath); // /log.txt 
  }, onError);
}

getFileの第一引数で指定しているlog.txt がファイル名です。ファイル名「log.txt」をPCのドライブ内で検索してもそれらしきファイルは見つかりません。他の名前でデータは保存されているようです。

Chromeのフォルダを探してみる

サンドボックス化して保存しているとのことなので、ChromeのAppDataフォルダを探してみました。Windows8 では

C:/Users/ユーザ名/AppData/Local/Google/Chrome/

Chromeフォルダがあります。

このフォルダ内で、書き込んだデータの内容をファイル内検索してみたところ

C:/Users/ユーザ名/AppData/Local/Google/Chrome/User Data/Default/File System/002/p/00/00000071

に書き込んだ内容が保存されていました。

C:/Users/ユーザ名/AppData/Local/Google/Chrome/User Data/Default/File System

以下が、FileSystem APIで保存されたデータの置き場所になっています。log.txt 等のファイル名そのままでは保存されていないので、個別に上記フォルダ内を探すと良いです。ファイル名がわかりづらくなっていることからもわかる通り、ユーザが直接保存したデータの編集をすることは想定していないようです。

結論

データはFileSystem APIから操作しよう!