zoukankan      html  css  js  c++  java
  • 得到驱动器信息

    得到驱动器信息

    RFs 可以通过 Drive() 方法得到一个 TDriveInfo 的对像,该对像描述的驱动器信息

    定义如下:TInt Drive(TDriveInfo& anInfo,TInt aDrive=KDefaultDrive) const

    传入一个 TDriveInfo 对像,及一个 EDriveA~Z 的对像, DriveA~Z 表示驱动器,如果要遍例所有的驱动器

    可以通过

    TInt driverNumber =EDriveA;
     for (;driverNumber<=EDriveZ;driverNumber++)
     {
      ifs.Drive(di,driverNumber);
      if (di.iDriveAtt == KDriveAbsent)
       continue;
      
      }

    TDriveInfo 有 iDriveAtt 属性表示驱动器属性,有以下值

    Location: e32std.h 
     
    Drive attributes
    --------------------------------------------------------------------------------
    KDriveAttLocal
    const TUint KDriveAttLocal
    Description
    Drive is local.  本地驱动
    --------------------------------------------------------------------------------
    KDriveAttRom
    const TUint KDriveAttRom
    Description
    ROM drive.       ROM 驱动
    --------------------------------------------------------------------------------
    KDriveAttRedirected
    const TUint KDriveAttRedirected
    Description
    Output from a process on one drive redirected to another drive.
    进程在一个驱动的输出重新定向到另外一个驱动上
    --------------------------------------------------------------------------------
    KDriveAttSubsted
    const TUint KDriveAttSubsted
    Description
    Drive letter has been substituted (assigned a path).
    驱动器被替代(指向一个路径)
    --------------------------------------------------------------------------------
    KDriveAttInternal
    const TUint KDriveAttInternal
    Description
    Drive is internal (not removable).
    --------------------------------------------------------------------------------
    KDriveAttRemovable
    const TUint KDriveAttRemovable
    Description
    Drive is removable.
     

    其它的属性 iMediaAtt 及 iType和iBattery 可以查询 sdk

    具体使用请看以下代码(来自 sdk例子)


    #include "DriveInfoLx.h"
    #include 
    <e32base.h>
    #include 
    <e32std.h>
    #include 
    <e32cons.h>            // Console
    #include <f32file.h>

    //  Constants
    _LIT(KTextConsoleTitle, "Console");
    _LIT(KTextFailed, 
    " failed, leave code = %d");
    _LIT(KTextPressAnyKey, 
    " [press any key]\n");

    //  Global Variables
    LOCAL_D CConsoleBase* console;  // write all messages to this
    RFs ifs;
    //  Local Functions
    void formatDriveInfo(TDes& abuf,TDriveInfo &di);
    void printDriveInfo()
    {
     User::LeaveIfError(ifs.Connect());
     TDriveInfo di;
     TBuf
    <256> buf;
     TInt driverNumber 
    =EDriveA;
     
    for (;driverNumber<=EDriveZ;driverNumber++)
     {
      ifs.Drive(di,driverNumber);
      
    if (di.iDriveAtt == KDriveAbsent)
       
    continue;
      
      formatDriveInfo(buf,di);
      buf.Delete(
    0,buf.Length());
      console
    ->Getch();
     }
     
     ifs.Close();
    }
    void formatDriveInfo(TDes& abuf,TDriveInfo &di)
    {
     _LIT(KFormatString,
    "iType=%02x,iDriveAtt=%02x,iMediaAtt=%02x\n");
     _LIT(KBatLow,
    "Battery low\n");
     _LIT(KBatgood,
    "Battery good\n");
     _LIT(KBatNotsupported,
    "Battery not supported");
     _LIT(KNotPresent,
    "No media present\n");
     _LIT(Kfloppy,
    "Media is floppy disk\n");
     _LIT(KHard,
    "Media is hard disk\n");
     _LIT(KCDROM,
    "Media is CD-ROM\n");
     _LIT(KRam,
    "Media is RAM\n");
     _LIT(KRom,
    "Media is ROM\n");
     _LIT(KFlash,
    "Media is flash\n");
     _LIT(KRemote,
    "Media is remote\n");
     _LIT(KUnknown,
    "Media is unknown\n");
     _LIT(KDriveAtts,
    "Drive attributes:");
     _LIT(KLocal,
    " local");
     _LIT(KRomDrive,
    " Rom");
     _LIT(KRedirected,
    " redirected");
     _LIT(KSubstituted,
    " substituted");
     _LIT(KInternal,
    " internal");
     _LIT(KRemoveable,
    " removeable");
     _LIT(KDynamic,
    " dynamic");
     _LIT(KDual,
    " dual-desity");
     _LIT(KFormattable,
    " formattable");
     _LIT(KWriteProtected,
    " write-protected");
     _LIT(KnewLine,
    "\n");
     _LIT(KMediaAtts,
    "\nMedia attributes:");
     abuf.AppendFormat(KFormatString,TInt(di.iType),TInt(di.iBattery),TInt(di.iDriveAtt)
      ,TInt(di.iMediaAtt));
     
    switch(di.iBattery)
     {
     
    case EBatLow:
      abuf.Append(KBatLow);
      
    break;
     
    case EBatGood:
      abuf.Append(KBatgood);
      
    break;
     
    default:
      abuf.Append(KBatNotsupported);
     }
     
    switch(di.iType)
     {
     
    case EMediaNotPresent:
      abuf.Append(KNotPresent);
      
    break;
     
    case EMediaFloppy:
      abuf.Append(Kfloppy);
      
    break;
     
    case EMediaHardDisk:
      abuf.Append(KHard);
      
    break;
     
    case EMediaCdRom:
      abuf.Append(KCDROM);
      
    break;
     
    case EMediaRam:
      abuf.Append(KRam);
      
    break;
     
    case EMediaFlash:
      abuf.Append(KFlash);
      
    break;
     
    case EMediaRom:
      abuf.Append(KRom);
      
    break;
     
    case EMediaRemote:
      abuf.Append(KRemote);
      
    break;
     
    default:
      abuf.Append(KUnknown);
     }
     
     abuf.Append(KDriveAtts);
     
    if (di.iDriveAtt && KDriveAttLocal)
      abuf.Append(KLocal);
     
    if (di.iDriveAtt && KDriveAttRom)
      abuf.Append(KRomDrive);
     
    if (di.iDriveAtt && KDriveAttRedirected)
      abuf.Append(KRedirected);
     
    if (di.iDriveAtt && KDriveAttSubsted)
      abuf.Append(KSubstituted);
     
    if (di.iDriveAtt && KDriveAttInternal)
      abuf.Append(KInternal);
     
    if (di.iDriveAtt && KDriveAttRemovable)
      abuf.Append(KRemoveable);
     abuf.Append(KMediaAtts);
     
    if (di.iMediaAtt && KMediaAttVariableSize)
      abuf.Append(KDynamic);
     
    if (di.iMediaAtt && KMediaAttDualDensity)
      abuf.Append(KDual);
     
    if (di.iMediaAtt && KMediaAttFormattable)
      abuf.Append(KFormattable);
     
    if (di.iMediaAtt && KMediaAttWriteProtected)
      abuf.Append(KWriteProtected);
     abuf.Append(KnewLine);
     console
    ->Printf(abuf);
     
    }
    LOCAL_C 
    void MainL(const TDesC& aArgs)
        {
        
    //
        
    // add your program code here, example code below
        
    //
        
    //console->Write(_L("Hello, world!\n"));
     printDriveInfo();
        console
    ->Printf(_L("Command line args: \"%S\"\n"), &aArgs);
        }

    通过 TVolumeInfo 可以得到驱动器的总空间及剩余空间大小,及 DriveInfo 信息,同时也能得到 Drive Name  ,但代码里写上就是无法得到
    VolumeName,不知是不是模拟器与真机不同,以下是测试代码

    void viewVolumnInfo()
    {
        User::LeaveIfError(ifs.Connect());
        _LIT(KVInfo,
    "drive:%S\nTotal size:%d\nFree Size:%d\n");

        TVolumeInfo  vi;
        TInt driveNum
    =EDriveA;
        
    for (;driveNum<=EDriveZ;driveNum++)
        {
            TInt error 
    = ifs.Volume(vi,driveNum);
            
    if (error !=KErrNone )
            {
                
                console
    ->Printf(KVInfo,&vi.iName,vi.iSize,vi.iFree);
                console
    ->Getch();
            }
            
        }

        ifs.Close();
    }

  • 相关阅读:
    context:component-scan报错
    goland 实用键
    React-Native 指定模拟器RUN-IOS
    mac 卸载编辑器卸不干净
    go 区分指针
    go 学习Printf
    我的命令行
    mysql8的坑
    小三角
    eslint 禁用命令
  • 原文地址:https://www.cnblogs.com/zziss/p/1651156.html
Copyright © 2011-2022 走看看