研究室生活のメモ・・・だった過去の遺産。移転先→http://negimochix2.blogspot.com/
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Fileクラスは,AIRで追加された,一括したファイル・ディレクトリ管理ができる万能クラス.
便利なのはいいんだけど,セキュリティーエラーにハマっちゃって・・・.
ハマった割にはたいしたこと無かったけど,知らなかったら解決しない問題なのでメモしておく.
静的プロパティFile.applicationDirectoryはアプリケーションのインストール先を指すFileオブジェクト.
さらに,resolvePathメソッドでpd.iniというファイルパスを作成し,ファイルの保存先(oldPlayData)とする.
さらに,File.createTempFileメソッドで一時保存先(newPlayData)を確保.
oldPlayDataから更新内容があった場合,一時保存先に更新内容を記録しておく.
このへんのプログラムは本題でないので省略.
ウインドウを閉じる時,
一時保存先からコピーしてpd.iniに書き込んだのち,一時保存先のファイルを削除する.
これだけのプログラムなのに,何故か最初のtryで「SecurityError: fileWriteResource」
どーなってんのってググってみたら,
どうやら,applicationDirectoryにおいて,ファイルを作成・書き込みすることはセキュリティ上認められていないらしい.
( ´゚д゚`)エー
その抜け道として,コピー前に,
セキュリティエラーから抜けられるとか.
でもそのかわり,
・AIRアプリケーションアンインストール時に自分で作成したファイルは削除されない
・作成したファイルが残っている状態で再インストールしようとするとエラーが発生
引用: applicationDirectory配下のファイルにアクセスする方法 - Fores Labs
あーだめだこれw
素直に,
これだと,applicationStorageDirectoryは,実際のディレクトリ位置がOSによって,
どうやら,このディレクトリはアンインストールと同時に消去されるらしい.
結論:
applicationDirectoryはファイルの書き込みには使用しない
(使うなら読み込み時.事前にパッケージしたswfとか画像データとかを読み込むのに使えばいい)
便利なのはいいんだけど,セキュリティーエラーにハマっちゃって・・・.
ハマった割にはたいしたこと無かったけど,知らなかったら解決しない問題なのでメモしておく.
// 保存先 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
この記事にコメントする
Infomation
【中の人】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー
【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@
【その他やってるもの】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー
【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@
【その他やってるもの】
・Twitter
・これは痛いピアプロ
・過去の遺産smart.fm
【作ったもの】
・製作に参加したDTX GDPメインサイト
で,実際に作ったIRページ
・これは痛いピアプロ
・過去の遺産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 |
カテゴリー
VOCALOID Ranking Watcher
新曲は常にチェックすべし。
おすすめ記事
jubeat ripples
今更やってみる
最新記事
(05/02)
(01/08)
(11/26)
(11/24)
(11/13)
(11/06)
(11/06)