AS3:检查FLV文件是否存在

时间:2012-01-14 20:25:55

标签: actionscript-3

我正在使用NetStream播放本地.FLV文件。 NetStream接收FLV文件的名称。

如何在尝试播放之前检查FLV是否存在?或者,如果可能,在尝试播放不存在的视频时是否会抛出一个事件?

// Doesn't catch an error if the FLV does not exist
try {
    ns.play("MyFLV.flv");
} catch (e:Error) {
    trace("File does not exist");
}

3 个答案:

答案 0 :(得分:2)

即使文件不存在,Event.OPEN仍会响应。将此更改为ProgressEvent对我有用。

fileTest.addEventListener( ProgressEvent.PROGRESS, fileTest_progressHandler );

...

function fileTest_progressHandler( event:ProgressEvent ):void
{
    fileTest.close();
    // Your file exists
}

答案 1 :(得分:1)

你在使用AIR吗?您可以使用File类:

var f:File = new File();
f.nativePath = "path/to/your/FLV";
if (f.exists) 
{
    // Your file exists
}
else
{
   // Your file doesn't exist
}

如果您正在开发网络播放器,那么在这种情况下您可能会使用URLLoader吗?像这样的东西?

var fileTest:URLLoader = new URLLoader();
fileTest.addEventListener( IOErrorEvent.IO_ERROR, fileTest_errorHandler );
fileTest.addEventListener( Event.OPEN, fileTest_openHandler );
fileTest.load( new URLRequest( "path/to/your/FLV" ));

function fileTest_errorHandler( event:Event ):void
{
    // Your file doesn't exist 
}

function fileTest_openHandler( event:Event ):void
{
    fileTest.close();
    // Your file exists
}

答案 2 :(得分:0)

警告:上面的代码示例有点误导。如果您忘记在路径中放置一个前导斜杠,那么上面设置nativePath字段的代码将因错误2004而崩溃,因为根相对路径始终以正斜杠开头(在macintosh上)。在Windows上,您将放入类似“C:\ my \ folder \ path \ filename.txt”

的路径

通常,使用resolvePath函数会更安全,它使用正斜杠作为子文件夹的分隔符创建独立于平台的路径结构。即使您需要根相对路径,也可以使用resolvePath函数。在下面的代码中,您可以看到我们已经创建了一个相对于applicationDirectory的路径(这是AIR中的一个特殊的元文件夹名称),但是如果子路径有一个开始斜杠,那么该路径将是root相对的。

var f:File = File.applicationDirectory.resolvePath(subpath);
if (f.exists)
    return T;
else
    return F;