vc 磁盘相关设置

来源:百度文库 编辑:神马文学网 时间:2024/04/29 14:16:33
1 判断驱动器属性?
 我们可以通过GetDriveType函数来获得驱动器的类型。UINT GetDriveType( LPCTSTR lpRootPathName // root directory );   函数功能   判断磁盘类型   参数说明   lpRootPathName 包含了根目录路径的字符串指针   返回值   DRIVE_UNKNOWN 未知的磁盘类型   DRIVE_NO_ROOT_DIR 说明lpRootPathName是无效的   DRIVE_REMOVABLE 可移动磁盘   DRIVE_FIXED 固定磁盘   DRIVE_REMOTE 网络磁盘   DRIVE_CDROM 光驱   DRIVE_RAMDISK 为RAM #include
#include int _tmain(int argc, _TCHAR* argv[])
{
/* 
 char a[] = ("ABCDEFGH");  for (int i = 0; i < 8; ++i)
 {   TCHAR root[100];
  swprintf(root, TEXT("%c:\\"), a[i]);
  wprintf(TEXT("now root is %s\n"), root);
  unsigned int ab = GetDriveType(root);*/      //取当前电脑中所有盘符的名称,写入driverstring中     CStringArray driverstring;     siz_t alldriver  = ::GetLogicalDriveString(0,NULL);    _TCHAR *driverstr;    driverstr = new _TCHAR[alldriver + sizeof(_T(""))];     if(GetLogicalDriveString(alldriver,driverstr) != driverstr -1)         return;      _TCHAR *pdriverstr = driverstr;      siz_t alldriver  = strlen(pdriverstr);      while(driversize>0)
       {
           driverstring.Add(pdriverstr);
           pdriverstr+=driversize+1;
           driversize=strlen(pdriverstr);      }     //获得每个盘的类型      for(int i = 0 ; i< driverstring.GetSize();i++)      {             unsigned int ab = GetDriveType(driverstring[i]);              if(ab == DRIVE_CDROM)
             {
                  wprintf(TEXT("%s is CDROM\n"), root);
             }
              else if(ab == DRIVE_UNKNOWN) 
             {
                  wprintf(TEXT("%s is unknown\n"), root);
             }
             else if(ab == DRIVE_REMOVABLE) 
             {
                  wprintf(TEXT("%s is REMOVABLE\n"), root);
             }
             else if(ab == DRIVE_NO_ROOT_DIR) 
             {
                  wprintf(TEXT("%s is NO ROOT DIR\n"), root);
             }
             else if(ab == DRIVE_RAMDISK) 
             {
                  wprintf(TEXT("%s is RAMDISK\n"),root);
             }
             else if(ab == DRIVE_REMOTE)
              {
                     wprintf(TEXT("%s is REMOTE\n"),root);
              }
              else if(ab == DRIVE_FIXED)
              {
                  wprintf(TEXT("%s is FIXED\n"),root);
              }        }                          system("pause");
       return 0;
}  2. 获取磁盘空间和磁盘序列号 BOOL WINAPI GetDiskFreeSpaceEx(
    __in_opt LPCWSTR lpDirectoryName,
    __out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller,
    __out_opt PULARGE_INTEGER lpTotalNumberOfBytes,
    __out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes
  ); lpDirectoryName是驱动器的名称。
lpFreeBytesAvailableToCaller是用户可用的磁盘空间。
lpTotalNumberOfBytes是磁盘总共的空间。
lpTotalNumberOfFreeBytes是磁盘空闲的空间。以上都是字节为单位。
BOOL GetVolumeInformation(
    LPCTSTR lpRootPathName,        // address of root directory of the
                                   // file system
      //根目录名称
   LPTSTR lpVolumeNameBuffer,     // address of name of the volume
            //存放卷标名称的缓存
    DWORD nVolumeNameSize,         // length of lpVolumeNameBuffer
      //卷标名称大小
    LPDWORD lpVolumeSerialNumber,  // address of volume serial number
      //卷标的序列号
    LPDWORD lpMaximumComponentLength,
                                  // address of system's maximum
                                   // filename length
      //最大文件名长度
    LPDWORD lpFileSystemFlags,     // address of file system flags
      //文件系统标志
    LPTSTR lpFileSystemNameBuffer, // address of name of file system
      //存放文件系统名称的缓存
    DWORD nFileSystemNameSize      // length of lpFileSystemNameBuffer
      //存放文件系统名称的大小
 ); void  OnInitDialog(){       CListCtrl m_disklist;
       CImageList imglist;
       m_disklist.SetExtendedStyle(LVS_EX_GRIDLINES);
       m_disklist.InsertColumn(0,"磁盘驱动器",LVCFMT_LEFT,150);
       m_disklist.InsertColumn(1,"驱动器大小",LVCFMT_LEFT,150);       m_disklist.InsertColumn(2,"磁盘序列号",LVCFMT_LEFT,150);
       imglist.Create(16,16,ILC_COLOR32|ILC_MASK,0,0);
       imglist.Add(::AfxGetApp()->LoadIcon(IDI_DISK));
      DWORD size;
      size=::GetLogicalDriveStrings(0,NULL);
      if(size!=0)
      {
           HANDLE heap=::GetProcessHeap();
           LPSTR lp=(LPSTR)HeapAlloc(heap,HEAP_ZERO_MEMORY,size*sizeof(TCHAR));
           ::GetLogicalDriveStrings(size*sizeof(TCHAR),lp);
           while(*lp!=0)
           {
                  m_disklist.InsertItem(0,lp,0);
                  lp=_tcschr(lp,0)+1;
           }
      }      ULARGE_INTEGER totalsize;
      ULARGE_INTEGER freesize;
      ULARGE_INTEGER availablesize;      LPTSTR namebuf=new char[12];
      DWORD namesize=12;
      DWORD serialnumber;
      DWORD maxlen;
      DWORD fileflag;
      LPTSTR sysnamebuf=new char[10];
      DWORD sysnamesize=10;
      int num=m_disklist.GetItemCount();
      for(int i=0;i      {
           CString str,temp;
           str=m_disklist.GetItemText(i,0);
           ::GetDiskFreeSpaceEx(str,&totalsize,&freesize,&availablesize);
           temp.Format("%ld千字节",totalsize.QuadPart/1024);
           m_disklist.SetItemText(i,1,temp);           temp.Empty();           ::GetVolumeInformation(str,namebuf,namesize,&serialnumber,&maxlen,&fileflag,sysnamebuf,sysnamesize);
          temp.Format("%x",serialnumber);
          m_disklist.SetItemText(i,2,temp);
      }} 3.取消磁盘共享取消默认共享需要在控制台使用net命令,例如要取消C盘的默认共享,需要使用net share
 c:/del 命令。我们可以通过WinExec函数来执行关闭磁盘默认共享的net命令,该函数是在
 程序中执行其他可执行文件,语法如下:
 UINT WinExec(
    LPCSTR lpCmdLine,  // address of command line
       //命令行字符串,包括其他可执行文件所调用的参数
    UINT uCmdShow      // window style for new application
       //执行其他可执行文件时窗体的显示设置
  );
 如下示例代码:
 CString strcmd="net.exe share F:/del";
 ::WinExec(strcmd,SW_HIDE);   4.磁盘格式化磁盘是计算机存储数据的一种主要介质,主要分为两种:软盘(Floppy Disk)和硬盘(Hard Disk)。
 硬盘在使用之前先进行低级格式化(也称物理格式化),然后进行分区,最后进行高级格式
 化(也称逻辑格式化),这样才能存储数据。软盘不需要进行前两个步骤,直接进行高级格
 式化就能够使用了。通常硬盘在出厂前已经进行了低级格式化,使用前直接分区和高级格
 式化即可。高级格式化操作能将磁盘中的数据清空,并且能够恢复一些逻辑性的磁盘错误,
 因此常常被使用。
 在程序中我们可以调用FormatDriver函数来显示格式化磁盘的对话框,该函数是Shell32.dll
 文件中的函数。
 语法如下:
 FormatDriver(HWND hwnd,UINT drive,UINT fmtID,UINT options)
 参数说明:
 hwnd: 应用程序窗体句柄
 drive:磁盘驱动器序号.
 fmtID:格式化ID
 options:格式化选项
 如下示例代码:
 typedef DWORD (WINAPI *MyFunc)(HWND hwnd,
 UINT drive,UINT fmtID,UINT options);
 HMODULE hModule=::LoadLibrary("shell32.dll");
 if(hModule)
 {
  MyFunc FormatDriver= (MyFunc) GetProcAddress(hModule, "SHFormatDrive");
  if(FormatDriver)
   FormatDriver(this->GetSafeHwnd(),'F'-'A',0xFFFF,0);
 }