忍者ブログ
研究室生活のメモ・・・だった過去の遺産。移転先→http://negimochix2.blogspot.com/
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Fileクラスは,AIRで追加された,一括したファイル・ディレクトリ管理ができる万能クラス.
便利なのはいいんだけど,セキュリティーエラーにハマっちゃって・・・.
ハマった割にはたいしたこと無かったけど,知らなかったら解決しない問題なのでメモしておく.

// 保存先
var oldPlayData:File = (File.applicationDirectory).resolvePath("pd.ini");
// 一時保存先
var newPlayData:File = File.createTempFile();

// どこかでoldPlayDataの内容を読み込み

// どこかでoldPlayDataから更新された内容をnewPlayDataに一時的に保存

// 以下,ウインドウを閉じるときに
// newPlayDataが存在するか確認
if(newPlayData.exists) {
  try {
    // newPlayDataの内容をoldPlayDataにコピー
    newPlayData.copyTo(oldPlayData, true);
  }
  catch(error:Error) {
    trace(error.message);
  }

  try {
    // newPlayDataを削除
    newPlayData.deleteFile();
  }
  catch(error:Error) {
    trace(error.message);
  }
}
以下,プログラムの構成.

静的プロパティFile.applicationDirectoryはアプリケーションのインストール先を指すFileオブジェクト.
さらに,resolvePathメソッドでpd.iniというファイルパスを作成し,ファイルの保存先(oldPlayData)とする.

さらに,File.createTempFileメソッドで一時保存先(newPlayData)を確保.

oldPlayDataから更新内容があった場合,一時保存先に更新内容を記録しておく.
このへんのプログラムは本題でないので省略.

ウインドウを閉じる時,
一時保存先からコピーしてpd.iniに書き込んだのち,一時保存先のファイルを削除する.


これだけのプログラムなのに,何故か最初のtryで「SecurityError: fileWriteResource」


どーなってんのってググってみたら,
どうやら,applicationDirectoryにおいて,ファイルを作成・書き込みすることはセキュリティ上認められていないらしい.

( ´゚д゚`)エー

その抜け道として,コピー前に,
  oldPlayData = new File(oldPlayData.nativePath);

というように,一度nativePath(絶対パスのString)からFileクラスを再宣言すると,
セキュリティエラーから抜けられるとか.

でもそのかわり,
・AIRアプリケーションアンインストール時に自分で作成したファイルは削除されない
・作成したファイルが残っている状態で再インストールしようとするとエラーが発生
引用: applicationDirectory配下のファイルにアクセスする方法 - Fores Labs

あーだめだこれw

素直に,
// アプリケーションのプライベート記憶領域を指定
var oldPlayDataFile:File = (File. applicationStorageDirectory).resolvePath("pd.ini");
とするのが妥当かな.
これだと,applicationStorageDirectoryは,実際のディレクトリ位置がOSによって,
・Windowsの場合
  C:\Documents and Settings\[ユーザ名]\Application Data\[AIRアプリID]
  \Local Store

・Macの場合
  HD/Users/[ユーザー名]/Library/Preferences/[AIRアプリID]/Local Store/
となるので,上記のresolvePathでpd.iniを指定した場合は,
・Windowsの場合
  C:\Documents and Settings\[ユーザ名]\Application Data\[AIRアプリID]
  \Local Store\pd.ini

・Macの場合
  HD/Users/[ユーザー名]/Library/Preferences/[AIRアプリID]/Local Store/pd.ini
となる.
どうやら,このディレクトリはアンインストールと同時に消去されるらしい.


結論:
applicationDirectoryはファイルの書き込みには使用しない
(使うなら読み込み時.事前にパッケージしたswfとか画像データとかを読み込むのに使えばいい)

PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Infomation
くさもち 【中の人】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー

【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@

【その他やってるもの】
Twitter

・これは痛いピアプロ
・過去の遺産smart.fm

【作ったもの】
・製作に参加したDTX GDPメインサイト
で,実際に作ったIRページ
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Heartsnative
『Heartsnative/MOSAIC.WAV×鶴田加茂 feat.初音ミク』応援中!
VOCALOID Ranking Watcher
新曲は常にチェックすべし。
真・フルみっくすプレイヤー
おすすめ記事
jubeat ripples
今更やってみる