2012-01-14 4 views
2

Я использую NetStream для воспроизведения локального файла .FLV. NetStream получает имя FLV-файла.AS3: Проверьте, существует ли файл 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"); 
} 
+0

Это следует сделать это: [проверить, существует FLV] [1] [1]: http://stackoverflow.com/questions/3335790/how-to- check-for-the-flv-file-существование-before-playing-that-use-flvplayback-in – John

+0

Я использую NetStreams, а не класс FLVPlayback, так что это не сработает. – Abdulla

ответ

2

Event.OPEN все равно будет реагировать, даже если файл не существует. Меня это изменило для ProgressEvent.

fileTest.addEventListener(ProgressEvent.PROGRESS, fileTest_progressHandler); 

... 

function fileTest_progressHandler(event:ProgressEvent):void 
{ 
    fileTest.close(); 
    // Your file exists 
} 
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 
} 

не очень поможет, если вы разрабатываете WebPlayer Тхо, вы могли бы, вероятно, использовать 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 
} 
0

Предупреждение: приведенный выше пример кода немного вводит в заблуждение. Если вы забудете поставить ведущую косую черту в свой путь, приведенный выше код, устанавливающий поле nativePath, будет сбой с ошибкой 2004, потому что корневой относительный путь всегда начинается с косой черты (на macintosh). В Windows вы должны ввести путь, подобный «C: \ my \ folder \ path \ filename.txt»

В общем, вы гораздо более безопасны с помощью функции resolvePath, которая создает структуру структуры, независимую от платформы, с использованием косой черты как разделитель для подпапок. Даже если вам нужен корневой относительный путь, вы можете использовать функцию resolvePath. В этом коде ниже вы можете видеть, что мы сделали путь относительно applicationDirectory (который является особым именем метапапки в AIR), но если у subpath была начальная косая черта, путь был бы относительным.

var f:File = File.applicationDirectory.resolvePath(subpath); 
if (f.exists) 
    return T; 
else 
    return F; 
Смежные вопросы