Sunday, March 21, 2010    
Home My Books Blog ColdFusion About Me Back    

Calendar
<< May 2007 >>
S M T W T F S
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Search

Categories
 • Acrobat (3) [RSS]
 • Adobe (90) [RSS]
 • AdobeMAX06 (45) [RSS]
 • AdobeMAX07 (59) [RSS]
 • AdobeMAX08 (66) [RSS]
 • AdobeMAX09 (39) [RSS]
 • AdobeMAX10 (1) [RSS]
 • AIR (219) [RSS]
 • Appearances (191) [RSS]
 • Books (72) [RSS]
 • CFEclipse (15) [RSS]
 • ColdFusion (1381) [RSS]
 • Data Services (34) [RSS]
 • Fish Tank (5) [RSS]
 • Flash (197) [RSS]
 • Flex (498) [RSS]
 • Home Automation (5) [RSS]
 • Jobs (116) [RSS]
 • JRun (14) [RSS]
 • Labs (43) [RSS]
 • LiveCycle (34) [RSS]
 • MAX (232) [RSS]
 • Mobile (120) [RSS]
 • Regular Expressions (17) [RSS]
 • RIA (21) [RSS]
 • SQL (40) [RSS]
 • Stuff (536) [RSS]
 • Tips (CF Studio) (80) [RSS]
 • Tips (CF) (795) [RSS]
 • Tips (Dreamweaver) (91) [RSS]
 • Tips (Flex Builder) (2) [RSS]
 • Using CF (162) [RSS]

Other BLOGs
 • Charlie Arehart
 • Lee Brimelow
 • Ray Camden
 • Christophe Coenraets
 • Sean Corfield
 • Mihai Corlan
 • Cornel Creanga
 • Mark Doherty
 • John Dowdell
 • Danny Dura
 • Enrique Duvos
 • Steven Erat
 • Kevin Hoyt
 • Serge Jespers
 • Adam Lehman
 • Duane Nickull
 • Miti Pricope
 • Andrew Shorten
 • Ryan Stewart
 • James Ward
 • Greg Wilson
 • Full As A Goog

RSS Feeds
 • Feed
 • Subscribe

Join my mailing list and find out about new books and other topics of interest.

Thoughts, ideas, tips, musings, and pontifications (not necessarily in that order) by Ben Forta ...
NOTE: This is my personal blog, and the opinions and statements voiced here are my own.

Viewing By Entry / Main
May 30, 2007

GetDriveInfo() UDF Powered By .NET

This is an example that I used when demonstrating ColdFusion 8 .NET integration on the recent usergroup tour, and as requested, I am posting it publicly. GetDriveInfo() returns a query containing specifics about the hard drives on your server, it returns all drives unless an optional drive letter is passed to it. GetDriveInfo() uses the .NET System.IO.DriveInfo class (which was introduced in .NET 2, and thus this example requires .NET 2 or 3).

Here is the code:

<!--- Get drive details for one or all drives --->
<cffunction name="GetDriveInfo" returntype="query" output="false">
    <cfargument name="drive" required="no" default="">

    <!--- Local vars --->
    <cfset var result=QueryNew("name,type,isready,format,label,totalsize,freespace",
                            "varchar,varchar,bit,varchar,varchar,double,double")
>

    <cfset var sidiClass="">
    <cfset var drives="">
    <cfset var i=0>

    <!--- Get System.IO.DriveInfo class --->
    <cfobject type=".NET"
                name="sidiClass"
                class="System.IO.DriveInfo">

    <!--- Get drives --->
    <cfset drives=sidiClass.GetDrives()>

    <!--- Loop through drives --->
    <cfloop from="1" to="#ArrayLen(drives)#" index="i">
        <!--- Check if need this one --->
        <cfif ARGUMENTS.drive IS ""
            OR ARGUMENTS.drive EQ drives[i].Get_Name()
            OR (Len(ARGUMENTS.drive) IS 1
                AND ARGUMENTS.drive EQ Left(drives[i].Get_Name(), 1))>

            <!--- Add row --->
            <cfset QueryAddRow(result)>
            <!--- Get name, type, and ready flag --->
            <cfset QuerySetCell(result, "name", drives[i].Get_Name())>
            <cfset QuerySetCell(result, "type", drives[i].Get_DriveType().ToString())>
            <cfset QuerySetCell(result, "isready", drives[i].Get_IsReady())>
            <!--- Get extra details ONLY if ready, or will throw error --->
            <cfif drives[i].Get_IsReady()>
                <cfset QuerySetCell(result, "format", drives[i].Get_DriveFormat())>
                <cfset QuerySetCell(result, "label", drives[i].Get_VolumeLabel())>
                <cfset QuerySetCell(result, "totalsize", drives[i].Get_TotalSize())>
                <cfset QuerySetCell(result, "freespace", drives[i].Get_AvailableFreeSpace())>
            </cfif>
        </cfif>
    </cfloop>

    <!--- Return result --->
    <cfreturn result>

</cffunction>

And here is a simple test example:

<!--- Test with all drives --->
<h3>All Drives</h3>
<cfdump var="#GetDriveInfo()#">

<!--- Test with just C: drive --->
<h3>C: Drive</h3>
<cfdump var="#GetDriveInfo("C")#">

<!--- Display just space on C: drive --->
<h3>Free Space On C Drive</h3>
<cfdump var="#NumberFormat(GetDriveInfo("C").freespace)#">

Related Blog Entries

TrackBacks
There are no trackbacks for this entry.

No trackback URL. Trackbacks are only allowed via interactive form.

Comments

  © Copyright 1997-2009 Ben Forta, All Rights Reserved