Think of something that you wish Authorware could do but it doesn't?  Let the our good friends at Macromedia know via the wishlist.

Please let us know if you find any of the materials on this site inappropriate or offensive. Please include the url and why the material should be reviewed.

Comments and questions about the site are also welcome. Please no Authorware questions, use the AWARE list.

Back

B5015 - Why are my file path names not working! [The dangers of backslashes!]

by - Joseph Ganci


Does anyone know why

varList:=ReadExtFile(RecordsLocation^"infoList.txt")

and

varList:=ReadExtFile("c:\win\A5w_data\infoList.txt")

both return the contents of "infoList.txt". However, if I create my own training_data directory

varList:=ReadExtFile("c:\win\train\infoList.txt")

no value is returned?


AH-HA! Count yourself as the latest victim of the double-backslash beast! This drove my officemate nuts once for quite a while until I pointed out the error of his ways.

Here's what the problem is:

The backslash character is an escape character in Authorware. This means that what follows the backslash is important. If you follow it with an "r" for instance, \r, this means a return character, so that if var was:

var := "Joe\ris great."

showing var on the screen would show:

Joe
is great.

Here's another:

var := "Joe\ris\treally great!"

will get you:

Joe
is         really great!

What!?! The \t counts as a tab character in Authorware.

Now there are a handful of characters that can combine with the backslash to make an escape character, but most don't, and in those cases the backslash is counted as a normal backslash. See where this is headed? That's the case in your line:

varList:=ReadExtFile("c:\win\A5w_data\infoList.txt")

The letters w, a, and i don't combine with a \ to make an escape character, so the line works as is.

BUT (and this is a really big BUT)

The line:

varList:=ReadExtFile("c:\win\train\infoList.txt")

has a letter t after the backslash, making it a Tab character. You can now see it like this:

varList:=ReadExtFile("c:\winTABrain\infoList.txt")

Oops! If you had chosen a directory name that didn't start with a t, r, or n (and a couple of other characters) you would have been fine.

So how do you get a freaking backslash character to stay put? Use a second backslash: \\. This gets interpreted in Authorware as one backslash.

The ultimate solution? In file paths, always use two backslashes where one will normally go:

varList:=ReadExtFile("c:\\win\\train\\infoList.txt")

will be interpreted as:

varList:=ReadExtFile("c:\win\train\infoList.txt")

Oh, and you know those UNC network drives that start with two backlashes normally, like:

\\MyServer\MyFolder\MyFile.txt

Well you would need to write that as:

\\\\MyServer\\MyFolder\\MyFile.txt

Fun, huh?

A quick experiment will bear this out. Try typing in a Calc icon:

var := "c:\myfolder\tmyfile.txt"

Close the Calc, then reopen it. You will now see:

var := "c:\\myfolder\tmyfile.txt"

Notice that Authorware saw that the first backslash could not combine with an m to be an escape character, so it added a second backslash for you for good measure. On the second backslash combination, though, it saw that \t could be a legimimate escape sequence, so it didn't change that one. Tricky, huh?


Tom Adams added:
You might want to mention that what you describe is case-sensitive. AW adds the 2nd backslash IF it sees \T. As you stated, it does not if it sees \t.

There are 0 reviews
Add your review
Back