Hi,
check this out:
http://objectpainters.com/blog/2007/01/03/where-am-i-relative-paths/
The getPath things works in most cases. If you want a more complex version
that takes more things into account, you can use this:
You will need to replace the RuntimeExceptions with your own error
mechanism
(eg traces, regular errors).
/**
* Resolves pAssetPath against pBasePath.
*
* - if pAssetPath is not a relative path, pAssetPath is returned (eg the
full url)
* - if pBasePath is an empty path, pAssetPath is returned
* - if pBasePath is a relative path, an error is thrown
* - in all other situation a path is returned which may still be or not
valid.
*
* @param pAssetPath, a full or relative url
* @param pBasePath, a full or empty url, this url MAY contain a file as
well, it is stripped automatically
*
*/
public static function resolve (pAssetPath:String,
pBasePath:String):String
{
//no base path
if (pBasePath == null || pBasePath.length == 0) return pAssetPath;
if (pAssetPath == null) {
throw new RuntimeException (
"Assetpath cannot be null.",
Path, arguments.callee, null, null);
}
//file asset path
if (pAssetPath.indexOf ("http") == 0 || pAssetPath.indexOf ("ftp") == 0
||
pAssetPath.indexOf ("rmtp") == 0 || pAssetPath.indexOf ("file") == 0)
return pAssetPath;
//asset is relative, test basepath for correctness
if (pBasePath.indexOf ("http") != 0 && pBasePath.indexOf ("ftp") != 0 &&
pBasePath.indexOf ("rmtp") != 0 && pBasePath.indexOf ("file") != 0) {
throw new RuntimeException (
"Basepath is not null and not a full url, but needs to be either empty
or a full url.",
Path, arguments.callee, null, null);
}
//so now we know that pAssetPath is a relative url and pBasePath is a
full
url.
//first normalize both urls so that we are dealing with only one type of
separator
var lAssetPath:String = pAssetPath.split
("\\").join("/<file://%22).join(%22/>
");
var lBasePath:String = pBasePath.split
("\\").join("/<file://%22).join(%22/>
");
//strip everything after ? to strip parameters from basepath
if (lBasePath.indexOf("?") > -1) {
lBasePath = lBasePath.substr (lBasePath.lastIndexOf("?"));
}
//check if basepath ends with /, if not check if everything after /
contains a .
//if it ends with / it is a directory, if it doesnt end with / and
everything after contains a . we assume
//we are dealing with a file, otherwise a directory
if (lBasePath.charAt (lBasePath.length-1) != "/") {
//and the last part contains a . cut it off
var lLastDir:String = lBasePath.substr (lBasePath.lastIndexOf("/"));
if (lLastDir.indexOf (".") != -1) {
//dealing with file
lBasePath = lBasePath.substr (0, lBasePath.lastIndexOf("/")+1);
} else {
//assume the last part was a dir and the trailing slash was forgotten,
so add it
lBasePath += "/";
}
}
//at this point we have a relative url and full directory path with a
trailing /
//now create two stacks
var lAssetStack:Array = lAssetPath.split ("/");
var lBaseStack:Array = lBasePath.split ("/");
//remove trailing / from baseStack to provide a correct starting point,
//our invariant is that each directory 'starts' with a slash and not ends
lBaseStack.pop();
//remove any superflous items (pointers to current directory
//. points to current dir and isnt relative
//"" points to double slashes or a starting slash, we remove that too
while (lAssetStack[0] == "." || lAssetStack[0] == "") {
lAssetStack.shift();
}
//remove .. from assetStack AND end of basestack
while (lAssetStack[0] == "..") {
lAssetStack.shift();
lBaseStack.pop();
}
return lBaseStack.join("/")+"/"+lAssetStack.join("/");
}
Usage eg:
xml.load (Path.resolve ("assets/config.xml"), _clip._url));
greetz
JC
On Wed, Jan 30, 2008 at 6:24 AM, Deepanjan Das <[EMAIL PROTECTED]>
wrote:
Hi,
You need to keep duplicate files if you want it to work as single and
also
when loaded from main movie.
Easiest way is to create an xml directory at the place where the main
movie
resides and set the path as "xml/1.xml"
also copy this directory in the screens directory
so ths ame path will work for both :)
Hope this helps
Deepanjan Das
On Jan 30, 2008 10:10 AM, confusticate and bebother these dwarves! <
[EMAIL PROTECTED]> wrote:
Hello Flashcoders,
I'm trying to make a main movie ("controller.swf") that loads other
movies
("screen1.swf", "screen2.swf", etc), which are stored in a
subdirectory
called "screens".
In controller.swf I'm using loadMovie("screens/screenx.swf") to load
the
movies from the "screens" subdirectory, and this works fine. But the
problem
is that the movies in the "screens" subdirectory often reference XML
files
(which also live in the "screens" subdirectory). All works well when
you
play the individual screenx.swf files, obviously, but when you play
controller.swf, it is looking for the XML files in the same directory
as
itself (one directory "up").
How can I fix this problem so that playing controller.swf works fine,
as
well as playing each individual screenx.swf file in the "screens"
subdirectory? Is this possible? It seems like such a simple idea, but
I'm
so
stumped.
I should mention that this project is not actually going online - it
is
going to be converted to an EXE using Zinc and distributed via CD. So
I
can't use absolute paths.
Please! Heelp! Thanks!
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders