Murga-Projects Forums

Full Version: Listing availiable storage devices
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi all. It's been quite a while since I've been on here, but I'm back at it. I'm trying to build a list of all availiable internal and external drives that are mounted. It needs to work in Windows and Linux. In Windows it is kind of clumsy but I do have it working with this code.

Code:
--check for windows
CheckForWindows = "C:/"

windows = false

--Define the drive table.        
drive = {}

if lfs.attributes (CheckForWindows) ~= nil then
    
       windows = true

       --Check for all the Windows drives.
       if lfs.attributes ("A:/") ~= nil then
                drive["a"] = "A:"
       end

   -- Use the above code to check for each drive letter from A to Z.

end


In linux, my first thought was to just check the /mnt directory. However I found that some types of Linux don't use this directory. For instance my computer running PCLinuxOS has all removable media listed in the "/Media" directory and the "/mnt" directory is empty. I can see this could end up being really messy. Is there an easier way to do this?

Thanks,
Dan

For linux, I'd try to parse the output of the 'mount' command.
Like this more or less:

Code:
fh=io.popen("mount","r")
output = fh:read('*a')
for dev,point in output:gmatch("(/dev/[%w_/]+) on (/[%w_/]*).-\n") do
    print('--',dev,point)
end

Another Linux option is to check /etc/mtab, which is a list of all currently mounted filesystems.

Code:
for line in io.lines("/etc/mtab") do
if string.find(line,"^/dev/") then
  dev,_=string.gsub(line,"%s.*","") -- cut off everything after field 1
  print(dev)
end
end


or a more compact version that does similar...

Code:
for line in io.lines("/etc/mtab") do
  print(string.match(line,"^(/dev/%w+).*"))
end

Hey thanks!! Those all worked very well. I will give them a try in a few differant versions of Linux and wok it into my application.
Reference URL's