Matthieu
Matthieu

Reputation: 104

How to convert DOS path to normal path (.net)

I have a program that tracks changes on a local folder using a FileSystemWatcher object. The issue is that sometimes, on some environments and situations (I do not know which ones), this watcher gives me an event on a DOS path ("/Hello/How/Are/You" becomes something like "/HE~1/HO~1/AR~1/YO~1").

What I am looking for is a way to force this path back into its full and normal aspect.

Or at least something that can tell me that the path is indeed a DOS path, so I can process the entry differently.

EDIT: it has to work on long paths (+260 chars), so Path.GetFullPath(sShortPath) does not work for me here!

Upvotes: 0

Views: 902

Answers (3)

MikeT
MikeT

Reputation: 5500

The best method depends what you are looking for, if you just want to access the file once then the 8byte file names will work for internal file references

if you want to display to the user or store then there are 2 option

  1. Path contains most of the tools you need to manipulate paths fullPath = Path.GetFullPath(path1);

  2. FileInfo and DirectoryInfo these 2 classes provide persistent access to files and directory information and while they can be created with any valid path both have a Full name property that provides access to the full path

Upvotes: 1

Matthieu
Matthieu

Reputation: 104

As others said, Path.GetFullPath(sShortPath) works fine if not used on very long paths (+260 chars).

Here is a link I followed that worked for me.

GetLongPathName from kernel32.dll worked fine with me, I just had to change the 255 StringBuilder limit to a higher value to make it work with long paths.

Upvotes: 0

Simon Mourier
Simon Mourier

Reputation: 139266

Path.GetFullPath(@"/HE~1/HO~1/AR~1/YO~1") should do what you need.

Upvotes: 2

Related Questions