Monday 30 May 2016

Haskell: makeAbsolute: Convert path to absolute path

System.Directory module provides makeAbsolute function, which convert path to absolute path. If the path is relative to current directory then t he current directory is prepended and then the combined result is normalised. If the path is already absolute, the path is simply normalised.

This operation may fail with following errors.
Error
Description
HardwareFault
A physical I/O error has occurred.
isDoesNotExistError or NoSuchThing
There is no path referring to the working directory.
isPermissionError or PermissionDenied
The process has insufficient privileges to perform the operation.
ResourceExhausted
Insufficient resources are available to perform the operation.

UnsupportedOperation
The operating system has no notion of current working directory.

Following is the signature of normalize function. ‘normalise’ function is available at System.FilePath module.

Prelude System.FilePath> :t normalise
normalise :: FilePath -> FilePath


Following are the rules for normalize function , which normalizes a file path.
Posix:   normalise "/file/\\test////" == "/file/\\test/"
Posix:   normalise "/file/./test" == "/file/test"
Posix:   normalise "/test/file/../bob/fred/" == "/test/file/../bob/fred/"
Posix:   normalise "../bob/fred/" == "../bob/fred/"
Posix:   normalise "./bob/fred/" == "bob/fred/"
Windows: normalise "c:\\file/bob\\" == "C:\\file\\bob\\"
Windows: normalise "c:\\" == "C:\\"
Windows: normalise "C:.\\" == "C:"
Windows: normalise "\\\\server\\test" == "\\\\server\\test"
Windows: normalise "//server/test" == "\\\\server\\test"
Windows: normalise "c:/file" == "C:\\file"
Windows: normalise "/file" == "\\file"
Windows: normalise "\\" == "\\"
Windows: normalise "/./" == "\\"
         normalise "." == "."
Posix:   normalise "./" == "./"
Posix:   normalise "./." == "./"
Posix:   normalise "/./" == "/"
Posix:   normalise "/" == "/"
Posix:   normalise "bob/fred/." == "bob/fred/"
Posix:   normalise "//home" == "/home"

Prelude System.Directory> makeAbsolute "."
"/Users/harikrishna_gurram"
Prelude System.Directory> 
Prelude System.Directory> makeAbsolute ".."
"/Users/harikrishna_gurram/.."
Prelude System.Directory> 
Prelude System.Directory> makeAbsolute ".//Shared"
"/Users/harikrishna_gurram/Shared"
Prelude System.Directory> 
Prelude System.Directory> makeAbsolute ".\\Shared"
"/Users/harikrishna_gurram/.\\Shared"
Prelude System.Directory> 
Prelude System.Directory> makeAbsolute ".////Shared"
"/Users/harikrishna_gurram/Shared"
Prelude System.Directory> 
Prelude System.Directory> makeAbsolute ".////////Shared"
"/Users/harikrishna_gurram/Shared"
Prelude System.Directory> 
Prelude System.Directory> makeAbsolute ".///Shared"
"/Users/harikrishna_gurram/Shared"
Prelude System.Directory> 
Prelude System.Directory> makeAbsolute "/.///Shared"
"/Shared"
Prelude System.Directory> makeAbsolute "//.///Shared"
"/Shared"
Prelude System.Directory> makeAbsolute "///.///Shared"
"/Shared"
Prelude System.Directory>


Previous                                                 Next                                                 Home

No comments:

Post a Comment