我设计了一个AIR应用程序,它显示包含位于C:\目录中的所有txt文件的列表。我使用了以下代码:
var videoListsArr:ArrayList = new ArrayList();
var folder:File = new File(driveName+":\\");
folder.getDirectoryListingAsync();
folder.addEventListener( FileListEvent.DIRECTORY_LISTING, handleDirectoryListing );
private function handleDirectoryListing( event:FileListEvent ):void
{
for each(var item:File in event.files)
{
var itemExtn:String = (item.extension != null) ? item.extension.toLocaleLowerCase() : null;
if(item.isDirectory)
{
item.getDirectoryListingAsync();
item.addEventListener( FileListEvent.DIRECTORY_LISTING, handleDirectoryListing );
}
else if(!item.isSymbolicLink && itemExtn != null)
{
if(itemExtn == "txt")
videoListsArr.addItem(txt);
}
}
}
此功能正常但正在执行应用程序挂起并变得无响应。请告诉我如何解决这个问题,它显示txt文件列表而不会使应用程序无响应?
答案 0 :(得分:0)
从我所看到的,你得到一个目录,查看那里的所有文件,如果其中一个是目录,你会递归查看所有文件,这可能会变得非常沉重,具体取决于在开始文件夹上。删除第一个如果检查并告诉我它是否仍然没有响应
答案 1 :(得分:0)
我使用计时器来分解处理。我的计时器子类Timer添加文件:Array和目录:Array。
处理顶级目录的初始处理程序(在我的例子中, loadDirectoryHandler )加载了timer.files及其无法立即处理的所有文件以及所有子目录,< / p>
在每个循环中通过TIMER处理程序,它会分割出一大块文件Array(例如200个文件),处理它们,然后启动计时器(如果有剩余的话),以便在下一个TIMER事件中处理它们。 / p>
对于每个目录,它采用File对象和
file.addEventListener(FileListEvent.DIRECTORY_LISTING,loadDirectoryHandler); file.getDirectoryListingAsync();
干杯