我使用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?
答案 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中。