From: daz Date: 2004-04-03T14:39:22+09:00 Subject: Re: ruby, cygwin and paths Guillaume Marcais wrote: > On Fri, 2004-04-02 at 20:17, Hal Fulton wrote: > > Guillaume Marcais wrote: > > > This is almost not a ruby question... But I need a ruby solution! > > > > > > How to convert a 8.3 dos paths to its fully expanded version. For > > > example, how to translate: > > > > > > C:\\CYGWIN\\HOME\MYFULL~1\MONROE~9.ALT > > > > > > to > > > > > > /cygdrive/c/cygwin/home/My Full Name/Monroe-Tyson.alt > > > > > > The basename of this last path is relevant to me and while MONROE~9 is > > > unusable. cygpath -u, from the cygwin distribution, doesn't expand the > > > 8.3 names. It merely changes the \\ into /. How fancy! > > > > > > Any solution out there? > > > > There's always the "ugly" way -- don't say you heard it here. > > > > Something like: > > > > path = `cmd /c dir #{file}`.split("\n")[6][-1] > > > > That's untested. > > I guess I'll settle for sliglthly improved: > > path = `cmd /c dir /b #{file}` > > The /b is the bare format: only the name. > > Thanks all. > Guillaume. > > > > > Hal > > > > > > > If you wanna see ugly, add this to your list of possible holiday destinations: http://support.microsoft.com/default.aspx?scid=kb;en-us;154822 #------------------------------------------------------------------------ I don't know if this'll work on cygwin. On native Win98+, it expands the full path. #------------------------------------------------------------------------ require 'Win32API' GetLongPathName = Win32API.new('kernel32', 'GetLongPathName', 'PPL', 'L') f_short = 'D:\PROGRA~1\BORLAND\CBUILD~1\PROJECTS\CONNEC~1\CONNEC~1.CPP' f_long = "\0" * 260 flen = GetLongPathName.call(f_short, f_long, f_long.size) puts f_long[0, flen] #------------------------------------------------------------------------ #=> D:\Program Files\Borland\CBuilder4\Projects\ConnectLog\ConnectLog.cpp daz