プロが教える店舗&オフィスのセキュリティ対策術

AS3.0で,外部ファイルにデータを書き出す方法
ご覧いただき,ありがとうございます。

現在,Flash CS3でActionScript3.0を使う練習として,
体重の記録アプリを作っています。

このアプリで実装したいのは,以下の3点です
1.テキストデータを読み込んで体重の推移を表示する
2.テキストボックスなどで現在の体重が入力されると,
 それを外部ファイルに書き出して保存する
3.体重を保存したファイルをswfファイルとセットにして
 配布すれば,他のPCでも1の作業が行える

このうち,1は比較的簡単に行えるのですが,外部ファイル
への書き出しの方法がわからず,詰まってしまいました。

私が調べた範囲では,Shared Objectを使うことでこれを
クリアできるかもしれないのですが,この方法を使った場合に
作成されるsolファイルを,swfと同じフォルダに作る方法が
分からず,困っております。

また,もしかすると,Shared Objectを使わずとも,
直接外部ファイル(テキストなど)を読み書きする方法があるなら
それを使いたいのですが,これに関しては,そのような方法が
あるのかどうかすら分からないという状態です。

そこで,以下のいずれかにお心当たりのある方がいらっしゃれば
ご助言をいただけますよう,お願い致します。

・solファイルをswfと同じフォルダ(あるいは直下のフォルダ)に
 置く方法を知っている
・もっと簡単に,直接テキストを読み書き出来る方法を知っている
 (あるいは,そんな方法など無いと断言できる)

以上,よろしくお願い致します。

A 回答 (3件)

再び失礼します、No.1です.



私自身Flash Player 9以上対象の案件が多いので
不勉強ながら使った事が無かったのですが
Flash Player 10以上対象ならFileReferenceの新しい機能が使えますね.

http://blogs.adobe.com/akamijo/archives/2008/07/ …

FileReference クラス自体は以前からありますが
(Playerがローカルファイルのデータを直接操作することができなかったため
サーバにファイルをアップロードする位のクラス)
Flash Player 10からユーザ操作により
ローカルのファイルを直接(←重要)開いたり
保存したりできるようになっています.

説明しておいて何ですが、SharedObjectはデータ保存としては
弱いと個人的に思うので、上記クラスの新APIを使う事により
前回の説明とは異なる設計ができそうです.

ただ、CS3をお使いとの事なので
Flash Player 10 に対応するコンパイラとエディタ
(フリーでFlex SDK +FlashDevelop等)を
使うか、Flash CS4が必要になります.

No.2のかたが仰る通り
AIRアプリケーションにするのも良いと思います.
(その場合ユーザ側にAIRランタイムをインストールさせる必要があります.)

参考URL:http://blogs.adobe.com/akamijo/archives/2008/07/ …
    • good
    • 0
この回答へのお礼

重ねてのご回答,ありがとうございます。
FileReferenceクラスに,そんな昨日が追加されたとは驚きです!
早速リンク先を拝見して,使えそうだと直感いたしました。特に,開くと同時にユーザーが読み込みファイルの指定をできるようにしたいと考えていたので,一石二鳥です。
ゆくゆくはAIRに移行するとして,まずは練習ですのでこちらの方法でトライしてみたいと思います。また,この機能が欲しいので,がんばってCS4かCS5を導入します。

今回は,まさに「待てば海路の日和あり」でした。ありがとうございました。

お礼日時:2010/04/28 15:32

airアプリってことなら…



参考URL:http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/fl …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

AIRですか。恥ずかしながら、初耳でした。
導入さえしてしまえば、これはとても便利そうですね。
勉強させていただいてから、前向きに導入を検討したいと思います。

多くの方にご意見を伺ってよかったです。

お礼日時:2010/04/26 10:03

swfファイルのみで直接テキストファイル(メモ帳等で開ける.txtファイル)を


書き出し・保存することはできません.

配布されるということは、ローカルのFlashPlayerで動作させる、または
exeファイルにするのでしょうか.一応その前提で回答していますので
的確な回答ではないかもしれません、参考までにご覧ください.

SharedObjectを使う方法について
SharedObjectは以下のような性質があります.
・ユーザーが意図してローカル記憶領域を0にした場合保存できない
・決められたサイズ以上は保存できない
・保存場所はある程度までしか選べない
(一応引数でディレクトリを指定できますが、それはデフォルトの保存先より下に
限定されます)→一つ目のご質問、たとえばデスクトップにあるフォルダ××を
選び、そこに保存するのは無理ということです.

SharedObjectを使う場合の
設計の一例をあげておきます.

・入力用テキストフィールド
・入力確定用ボタン
・体重の推移を表示するオブジェクト
を用意

----------------------------------
入力確定用ボタンが押されたタイミングで
・SharedObjectを参照(無い場合は作成される)
・記録したいプロパティを持ったObject(例えば{ date:(ボタンが押された日時),weight:(入力された体重) })を作成し、SharedObject.dataにプロパティを持たせて代入し書き込む
----------------------------------
・SharedObjectを参照(無い場合は作成される)
・SharedObject.dataを走査し、プロパティの値を取り出す

日時順に並べ替え、体重の推移を描画

注意点は、
・常に同じSharedObjectを参照するため、SharedObject.getLocal("weightLog")などと
一意の名前を決めておく
・SharedObject.dataに設定するプロパティ名が毎回同じだと上書きされて
しまうので、常に異なるプロパティ名を設定する
(入力確定用ボタンが押された日時をプロパティ名にする等)

設計を詰めていく段階でほかにも色々注意点は出てきますが省きます.

上記の方法で一応1、2を満たすものはできます.3、は
>体重を保存したファイルをswfファイルとセットにして
 配布
するのではなく、swfファイルを配布し、これを起動して
体重入力を行うとローカルのsolファイルに体重が保存される、と
いうことになりますが….
    • good
    • 0
この回答へのお礼

大変詳しくご回答いただき、ありがとうございます。

やはりFlash単体でファイル操作はできないのですね。
また、SharedObjectには容量の制限をはじめ、数々の制約があるのですね…
あまり大量のデータを扱えないとなると、
後々動かなくなる危険性があるということですから、少し心配です。

ですが、まずはお教えいただいた方法で一度作ってみて、
それから問題点が出てくれば、それが解決できなかったときに
また質問させていただければと思います。

もうしばらくこのまま締め切らずに置かせていただきますが、
ご回答に不満があるわけではございませんので、悪しからずご容赦下さい。

お礼日時:2010/04/25 16:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!