Flex 3& Air 2:自动检测目录上的文件何时更新

时间:2010-07-27 06:46:06

标签: flex actionscript-3 air adobe

一个疯狂的想法刚刚从天而降,击中我的头部xD。当用户将新文件“添加”到目录中时,我想知道是否可以使用和App能够收听。

示例:

  1. 用户打开我们的应用程序。
  2. 用户在桌面上添加新文件(使用Microsoft资源管理器)。
  3. 我们的应用程序会自动检测是否已添加新文件并执行某项功能。
  4. 听起来很有意思吗?

    也许,这可以使用像Visual Basic这样的编程语言来完成,并使用NativeProcess api打开可执行文件并监听stdOut事件......(:

    有人有想法和我们分享? :)

    由于 隆巴迪

3 个答案:

答案 0 :(得分:0)

AIR可以原生处理......

只要被监视目录中的文件发生更改,FileSystemList类就会触发事件directoryChange

您甚至可以使用它来观察正在安装的驱动器(我认为Christian Cantrell显示了一个驱动器)

答案 1 :(得分:-1)

好的,我想我越来越近了,看看这个解决方案! :)

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);
   } 
}

最后,我们得到了一个数组(TempArray),我们可以在数据网格(例如)上使用这些数据集,例如:“扩展名,文件名,文件路径等等。”

文件每5秒更新一次。

而且,为什么我们使用所有代码而不是简单的“File.getDirectoryListing()”?因为我们每5秒更新一次应用程序,如果为什么要使用getDirectoryListing(),我们的应用程序将占用更多内存,而且cmd命令要快得多......:)

如果您有更好的想法,请与我们分享!谢谢! :d

答案 2 :(得分:-1)

适用于Windows的1个出色解决方案:使用Visual Studio,构建此处的.net应用http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx 在Adobe AIR中,使用本机进程侦听.net

调度的更改事件