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

How to know fast if another computer is accesible in AS3 (Adobe Air)

我正在使用 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 会花费很长时间并且应用程序会冻结,有时甚至会发送 "Application is not responding"来自Windows的消息,但隔了很长时间终于回复了。

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

虽然我不知道有什么方法可以使 File.exists() 执行得更快(可能没有办法,因为它更像是一个 OS 问题),您至少可以通过以下方式缓解问题改为使用异步操作 - 从而避免锁定 UI.

你可以跳过exists操作,只尝试异步打开文件,如果出错,那么你就知道文件不存在,它可能需要与使用[=12相同的时间=].

所以像这样:

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
}

综上所述,由于您只是在写入一个文件,因此检查它是否存在实际上没有任何意义(除非您需要使用该文件中的当前数据作为写入操作的一部分) - 如果您使用 FileMode.WRITE,文件是否存在并不重要,它会尝试保存文件。您需要将其包装在 try catch 中,以防网络位置不可用。