views:

108

answers:

3

In .NET is there a function that tests if a string is syntactically a correct path? I specifically don't want it to test if the path actually exists.

my current take on this is a regex:

([a-zA-Z]:|\\)?\\?([^/\\:*?"<>|]+[/\\])*[^/\\:*?"<>|]*

matches:

c:\
bbbb
\\bob/john\
..\..\

rejects:

xy:
c:\\bob
+1  A: 

I'd suggest just using a regex for this since you specifically don't want to test if the path exists.

Here's something google helped me dig up:

RegEx="^([a-zA-Z]\:|\\\\[^\/\\:*?"<>|]+\\[^\/\\:*?"<>|]+)(\\[^\/\\:*?"<>|]+)+(\.[^\/\\:*?"<>|]+)$"

You could combine this with System.IO.Path.GetInvalidPathChars() method and make the regex dynamically exclude all of the invalid characters.

Aaron Palmer
WT.. is that escaped for? I'm not able to make heads or tails of it.
BCS
A: 

You might be able to use System.IO.Path and the GetInvalidPathChars() function?

seanb
+3  A: 

I believe System.IO.Path.GetFullPath(path) will throw an exception if it is not a syntactically correct path without checking to see if it exists.

McWafflestix
If that works, nice, but the fail case is just as valid for me as the pass case do I'd rather not throw/catch.
BCS
Yeah, could be what is needed. Here's the msdn: http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx From the article,"However, if path does exist, the caller must have permission to obtain path information for path." Could throw a wrench in depending on the situation.
Aaron Palmer