2009-04-14 1 views
1

Я нахожу эту задачу сложной в AS3.Actionscript 3: Проблема экранирования символа «\» в полном пути к файлу

Извините, если у меня отсутствует что-то основное/простое или какой-нибудь встроенный метод, который может это сделать. Я не хорошо разбираюсь в RegExp.

У меня есть DYNAMIC строку, представляющих полный путь к файлу, который выглядит точно так же, как "D: \ Temp \ abc.doc". Я хочу извлечь файл filename из полной строки, например. abc.doc.

Мне известны методы, такие как использование «fullPath.lastIndexOf (« \\ »)» или регулярных выражений. Проблема в том, что это не работает, если у вас есть «\» на вашем пути. Он работает с "/". Динамический путь нельзя манипулировать, чтобы заменить «\» на «/» или любой другой разделитель. Моя интерпретация заключается в том, что поскольку «\» используется для выхода символов - ЛЮБОЙ символ, появляющийся после «\», игнорируется actionscript. например

var fullPath:String = "A\B\C"; 

trace(fullPath.length); //**RETURNS 3** since "\B" & "\C" 
         // are being treated as SINGLE chars 

var bSlash:int = fullPath.lastIndexOf("\\") //RETURNS **-1** 

ответ

0

Я думаю, что если использовать использовать valueOf свойство на вашей строке, чтобы получить элементарную строку, вы можете получить то, что вы хотите. ActionScript 3 обычно создает большой причудливый строковый объект, который делает магические вещи с escape-символами, но примитивная строка больше похожа на строку JavaScript/ECMA, а обратные косые черты должны отображаться как отдельные символы. Не проверял это, но попробуйте.

8

Вы должны использовать A\\B\\C (как на большинстве языков, в AS строковый литерал с невыбранным \ создает escape-последовательность путем объединения со следующим символом). У меня такое чувство, что вы не генерируете динамическую строку должным образом. Если строка должна быть контуром, то она должна содержать отдельный символ \ между фрагментами пути, экранируя обратную косую черту, используя \\.

0

Как указывал dirkgently, проблема заключается в использовании строкового значения вместо строкового литерала. Ссылка This помогла мне разобраться в этом.