I learned a lot while trying to figure it out!
However, @peter outranked me with a much simpler solution.
Here is mine, in case someone finds it useful. file_get_long_name.rb
I got an idea: an archive article vb-world.net and converted it to ruby.
require 'win32ole' def get_long_filename(shortpath, fso = WIN32OLE.new("Scripting.FileSystemObject")) path = case when fso.FolderExists(shortpath) fso.GetFolder(fso.GetAbsolutePathName(shortpath)) when fso.FileExists(shortpath) fso.GetFile(fso.GetAbsolutePathName(shortpath)) else return nil end parts = path.Path.split(/\\/) working = fso.GetDrive(parts.shift).RootFolder longpath = working.Path parts.each do |part| temppath = fso.BuildPath(longpath, part) working = fso.GetFolder(longpath) if fso.FolderExists(temppath) working.SubFolders.each do |sub| longpath = fso.BuildPath(longpath, sub.Name) if part== sub.ShortName || part == sub.Name end elsif fso.FileExists(temppath) working.Files.each do |sub| longpath = fso.BuildPath(longpath, sub.Name) if part== sub.ShortName || part == sub.Name end end end longpath end fso = WIN32OLE.new("Scripting.FileSystemObject") short = "C:\\DOCUME~1\\jamal\\Desktop\\NEWTEX~1.TXT" long = get_long_filename(short, fso) p long
zemoxian
source share