2009-11-18 1 views
0

J'essaie d'obtenir deux applications différentes pour communiquer à travers un fichier. Je voudrais app 1 pour ajouter du texte à un fichier, et app 2 pour remarquer, et lire les nouveaux octets (pas le fichier entier).Adobe Air - Lire les mises à jour de File avec FileStream

Il existe un événement, ProgressEvent.PROGRESS, qui est censé se déclencher lorsque de nouvelles données sont disponibles sur un FileStream, mais il se déclenche uniquement lorsque j'ouvre le fichier pour la première fois.

Fondamentalement, je voudrais laisser le FileStream ouvert, en écoutant comme un socket à la fin de ce fichier pour les changements. C'est possible? Des considérations de performance?

Thanks1

Répondre

0

Vous pouvez utiliser la classe FileMonitor qui fait partie du package 'as3corelib' d'Adobe pour surveiller les fichiers.

http://code.google.com/p/as3corelib/

Il est livré avec FileMonitorEvent.CHANGE, MOVE et créer des événements.

Présentation et exemple ici:

http://www.mikechambers.com/blog/2009/03/11/monitoring-file-changes-in-adobe-air/

+0

Ouais, j'espérais éviter d'utiliser une minuterie. C'est décevant. Je vais marquer cette réponse comme correcte à moins que quelqu'un ne trouve quelque chose de mieux. –

0

Je dirais que garder un enregistrement de la taille du fichier, vérifier périodiquement avec une minuterie, et ensuite chercher à la fin de l'ancien fichier quand il est plus grand. Avec AIR 2.0, ça devrait être facile, si vous intégrez quelque chose comme "tail -f".

+0

Exactement, je pensais que ce serait intégré. Ce n'est pas comme regarder un fichier pour les changements, c'est la science des fusées. J'ai trouvé l'événement de progression de FileStream, mais cela ne semble pas fonctionner. Merci pour votre réponse. –

0

Je comprends que vous voulez sans doute la prise comme « interface » pour la lecture/écriture de fichiers entre deux applications, mais vous pouvez être en mesure d'accomplir la même chose avec un SharedObject local et une classe 'manager' qui utilise la classe localConnection pour faire certaines choses à ce sharedObject/fichier. Pensée aléatoire ....

+0

Bonne idée, mais ce serait la même chose qu'un fichier plat, sauf si un objet partagé local ouvert déclenche un événement quand quelqu'un d'autre écrit dessus. –

+0

True. J'avais l'impression que c'était plus d'une relation 1: 1 "app". Moi aussi j'essaierais d'éviter la minuterie, simplement pour les ennuis de mémoire ... donc si vous avez une relation "many: many apps", vous pouvez jouer au jeu de serveur de messagerie et vous abonner à un flux de messagerie. Cependant, si vous avez une relation d'application 1: 1, le seul but de localConnection serait que la classe de gestionnaire que vous créez fasse le 'déclenchement d'événement' dont vous avez parlé. Mais, comme je l'ai dit, seulement une bonne option si le scenerio de app1 et app2 n'existe que comme vous l'avez décrit à l'origine. Bonne chance dans les deux cas. – jeremym