2010-07-27 4 views
4

Une idée folle est tombée du ciel et m'a frappé dans la tête xD. Je me demandais s'il est possible de faire et App capable d'écouter lorsque l'utilisateur "ajoute" de nouveaux fichiers à un répertoire.Flex 3 & Air 2: Détecte automatiquement quand les fichiers d'un répertoire sont mis à jour

Exemple:

  1. L'utilisateur ouvre notre application.
  2. L'utilisateur ajoute de nouveaux fichiers sur le bureau (en utilisant Microsoft Explorer).
  3. Notre application détecte automatiquement que de nouveaux fichiers ont été ajoutés et exécute une fonction ou quoi que ce soit.

Son intéressant intéressant?

Peut-être, cela pourrait être fait en utilisant un langage de programmation comme Visual Basic et ouvrez le fichier exécutable avec l'api NativeProcess et écouter un événement StdOut ... (:

Quelqu'un at-il et l'idée de partager avec nous?:)

Merci Lombardi

+0

Je ne peux pas trouver de solution avec AIR seul - vous devez utiliser un processus natif. – Amarghosh

+0

Si vous êtes intéressé uniquement par un dossier particulier, vous pouvez vérifier ce dossier toutes les n secondes en utilisant une minuterie et faire ce que vous voulez. – Amarghosh

+0

J'ai posté un code qui peut faire ce que vous dites Amargosh, vérifiez-le! ;). Quoi qu'il en soit, la solution que je viens de publier récupère toujours tous les fichiers sur un dossier spécifique. L'idée est de récupérer uniquement les fichiers qui ont été ajoutés. Merci pour votre commentaire :) –

Répondre

1

AIR peut gérer nativement ...

la classe FileSystemList déclenche un événement directoryChange chaque fois qu'un fichier dans les changements de répertoire surveillé.

Vous pouvez même l'utiliser pour surveiller les disques étant montés (je pense que Christian Cantrell a montré que l'on off)

-1

Ok, je pense que je me rapproche, consultez cette solution! :)

private var CheckDelay:Timer = new Timer(5000, 0); 

private function InitApp():void 
{ 
    CheckDelay.addEventListener(TimerEvent.Timer, CheckForNewFiles, false, 0, true); 
    CheckDelay.start(); 
} 

private function CheckForNewFiles(event:TimerEvent):void 
{ 
    var FS:FileStream = new FileStream(); 
    var Buffer:File = File.applicationStorageDirectory.resolvePath("FilesBuffer.cmd"); 
    FS.open(Buffer, FileMode.Write); 
    FS.writeUTFBytes("cd " + File.desktopDirectory.nativePath + "\r\n" + 
        "dir /on /b > " + File.applicationStorageDirectory.resolvePath("FileList.txt").nativePath); 
    FS.close(); 


    var Process:NativeProcess = new NativeProcess(); 
    var NPI:NativeProcessStartupInfo = NativeProcessStartupInfo(); // What a large name! xD 
    NPI.executable = Buffer; 
    Process.start(NPI); 
    Process..addEventListener(NativeProcessExitEvent.EXIT, ReadFileList, false, 0, true); 
} 

private function ReadFileList(event:Event):void 
{ 
    var FS:FileStream = new FileStream(); 
    var Buffer:File = File.applicationStorageDirectory.resolvePath("FilesBuffer.cmd"); 
    FS.open(Buffer, FileMode.Read); 
    var FileData:String = FS.readUTFBytes(FS.bytesAvailable); 
    FS.close(); 

    var FileArray:Array = FileData.split("\r\n"); 

    var TempArray:ArrayCollection = new ArrayColletion(); 
    var TempFile:File; 
    for(var i:int = 0;i<FileArray.length;i++){ 
    TempFile = new File(FileArray[i]); 
    TempArray.addItem(TempFile); 
    } 
} 

A la fin nous avons eu un tableau (TempArray) que nous pourrions utiliser sur une grille de données (par exemple) avec comme colums: "extension, nom de fichier, CheminFichier, etc .."

Les fichiers sont mis à jour toutes les 5 secondes.

Et, pourquoi nous utilisons tout ce code au lieu d'un simple "File.getDirectoryListing()"? Parce que nous mettons à jour notre application toutes les 5 secondes, si pourquoi utiliser getDirectoryListing(), notre application prendra beaucoup plus de RAM et aussi, la commande cmd est beaucoup plus rapide ... :)

Si vous avez une meilleure idée, s'il vous plaît partagez-le avec nous! Je vous remercie! : D

Questions connexes