如何快速了解AS3中是否可以访问另一台计算机(Adobe Air)

时间:2015-06-16 17:27:45

标签: file actionscript-3 air lan

我使用FileStream读取在局域网(LAN)中连接的两台计算机中的文件。 连接其他计算机时,我没有问题读取文件。我在写文件之前检查目录是否存在 我在阅读文件之前检查目录和文件是否存在。

file_pc1 = new File("//OTHER-PC/Folder/file.csv");
directory = new File("//OTHER-PC/Folder");

if (directory_pc1.exists)
{
    stream.open(file_pc1, FileMode.WRITE);
    stream.writeUTFBytes(csv.data);
    stream.close();
}
if (directory_pc1.exists && file_pc1.exists)
{
    stream.open(file_pc1, FileMode.READ);
    stream.writeUTFBytes(csv.data);
    stream.close();
}

所有这一切都很好但是如果另一台计算机没有连接,那么语句directory_pc1.exists和file_pc1.exists需要很长时间才能冻结,有时甚至会发送"应用程序没有响应"来自Windows的消息,但它终于在很长一段时间后响应。

是否有最快的方法来检查我是否连接到另一台PC?

1 个答案:

答案 0 :(得分:0)

虽然我不知道让File.exists()执行速度更快的方法(可能没有办法,因为它更多的是操作系统问题),但您至少可以通过以下方式解决问题:使用异步操作 - 从而避免锁定UI。

您可以跳过存在操作,只是尝试打开文件异步,如果错误,那么您知道该文件不存在,并且可能需要与使用{{1}相同的时间}}

这样的事情:

File.exists

所有人都说,既然你刚刚写了一个文件,甚至检查它是否存在实际上没有意义(除非你需要在写文件操作中使用该文件中的当前数据) - 如果您使用stream.addEventListener(IOErrorEvent.IO_ERROR, fileIOError); stream.addEventListener(Event.COMPLETE, loadComplete); stream.openAsync(file_pc1, FileMode.UPDATE); function loadComplete(e:Event):void { stream.writeUTFBytes(csv.data); stream.close(); } function fileIOError(e:IOErrorEvent):void { //file doesn't exist, do something } ,如果文件存在则无关紧要,它会尝试保存文件。如果网络位置不可用,您需要将其包装在try catch中。