zoukankan      html  css  js  c++  java
  • mfc 文件属性

           为了确定某个逻辑驱动器的类型,必须调用GetDriveType函数。它以路径名作为参数(如C:\),返回DRIVE_FIXED,DRIVE_REMOVABLE,或DRIVE_UNKNOWN。下面列出了所有可能返回的值:这些值在winbase.h定义

    #define DRIVE_UNKNOWN      0   // 无效路径名
    #define DRIVE_NO_ROOT_DIR  1   // 无效路经,如无法找到的卷标
    #define DRIVE_REMOVABLE    2   // 可移动驱动器(如磁盘驱动器,光驱等)
    #define DRIVE_FIXED        3   // 固定的驱动器 (如 通常的硬盘)
    #define DRIVE_REMOTE       4   // 网络驱动器
    #define DRIVE_CDROM        5   // CD-ROM
    #define DRIVE_RAMDISK      6   // 随机存取(RAM) 磁盘

     Public Const FILE_" ATTRIBUTE_ARCHIVE = &H20

      Public Const FILE_ATTRIBUTE_COMPRESSED = &H800

      Public Const FILE_ATTRIBUTE_DIRECTORY = &" H10

      Public Const FILE_ATTRIBUTE_HIDDEN = &H2

      Public Const FILE_ATTRIBUTE_" NORMAL = &H80

      Public Const FILE_ATTRIBUTE_READONLY = &H1

      Public Const FILE_ATTRIBUTE_" SYSTEM = &H4

      Public Const FILE_ATTRIBUTE_" TEMPORARY = &H100


    有关驱动器的函数有GetLogicalDrives,GetLogicalDriveStrings和GetDriveType。前两个用来获取逻辑驱动器盘符,GetLogicalDriveStrings返回路径名字符串,如:

          "A:\<null>C:\<null>F:\<null><null>"

        这里每一个路径名都由NULL(空或者零)字符分隔,最后结尾是两个空字符--这是标准的C风格处理方法。对于喜欢操作位和字节的汇编语言使用者来说,GetLogicalDrives是个很好用的API函数。它以位掩码的形式返回逻辑驱动器。即在一个DWORD类型的返回值中,位0(最小的一位)表示驱动器A,位1表示驱动器B,以此类推。每一个位的状态如果是on,则表示对应的逻辑驱动器存在;否则状态为off,表示对应的逻辑驱动器不存在。大家知道DWORD是一个32位的值,足以包括所有的英文字母,也就是说最多可有26个盘符。 
    TCHAR buf[100];
     DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);

    //mfc 中删除dir目录下的东东
    void cmd_rd(CString  dir)
    {


      WIN32_FIND_DATA Sr;
      HANDLE Handle;
      int iattr;
      //如果是目录
     iattr=GetFileAttributes(dir);
     if(iattr==FILE_ATTRIBUTE_DIRECTORY)
     {
     try
     {
     Handle=::FindFirstFile(dir+"\\*.*", &Sr);
     }
     catch(...)
     {
     return;
     }
    if (Handle)
      {
        do
        {
          if (Sr.cFileName[0]!='.')
    {
            if(Sr.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)
              {
               cmd_rd(dir+"file://%22+sr.cfilename/);
              }
            else
            {
    ::SetFileAttributes(dir+"file://%22+sr.cfilename,0/);
            ::DeleteFile(dir+"file://%22+sr.cfilename/);
            }
          }
        } while (::FindNextFile(Handle,&Sr));
        ::FindClose(Handle);
      }
     if(iattr==FILE_ATTRIBUTE_DIRECTORY)
     ::RemoveDirectory(dir);
      }
     else
     {
            ::SetFileAttributes(dir,0);
            ::DeleteFile(dir);
      }
    }

    //mfc 下的控制台清屏
    void cmd_cls(HANDLE hConsole)
    {
      COORD coordScreen = { 0, 0 };    // home for the cursor
       DWORD cCharsWritten;
       CONSOLE_SCREEN_BUFFER_INFO csbi;
       DWORD dwConSize;
     
    // Get the number of character cells in the current buffer.
     
       if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
          return;
       dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
     
       // Fill the entire screen with blanks.
     
       if( !FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
          dwConSize, coordScreen, &cCharsWritten ))
          return;
     
       // Get the current text attribute.
     
       if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
          return;
     
       // Set the buffer's attributes accordingly.
     
       if( !FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
          dwConSize, coordScreen, &cCharsWritten ))
          return;
     
       // Put the cursor at its home coordinates.
     
       SetConsoleCursorPosition( hConsole, coordScreen );
    }

    //MFC中拷贝文件夹
    void cmd_xcopy(char* src,char* dst)
    {
     
     WIN32_FIND_DATA FindFileData;
     HANDLE hFind;
     char tmpsrc[256];
     strcpy(tmpsrc,src);
     strcat(tmpsrc,"\\*.*");
     hFind = FindFirstFile(tmpsrc, &FindFileData);
     if(hFind == INVALID_HANDLE_VALUE)
      return;
     CreateDirectory(dst,0);
     do
     {
     char newdst[256];
     strcpy(newdst,dst);
     if(newdst[strlen(newdst)]!='\\')
      strcat(newdst,"\\");
     strcat(newdst,FindFileData.cFileName);

     char newsrc[256];
     strcpy(newsrc,src);
     if(newsrc[strlen(newsrc)]!='\\')
      strcat(newsrc,"\\");
     strcat(newsrc,FindFileData.cFileName);
     if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
     {
      if(strcmp(FindFileData.cFileName,".")!=0&&strcmp(FindFileData.cFileName,"..")!=0)
      {
       cmd_xcopy(newsrc,newdst);
      }
     }else
     {
      CopyFile(newsrc,newdst,false);
     }
     }while(FindNextFile(hFind,&FindFileData));
        FindClose(hFind);
    }
    //MFC中创建目录
    BOOL  WinCmd::cmd_md(char* lpPath)
    {

             CString pathname = lpPath;
             if(pathname.Right(1) != "\\")
                      pathname += "\\" ;
             int end = pathname.ReverseFind('\\');
             int pt = pathname.Find("\\");
             if (pathname[pt-1] == ':')
                       pt = pathname.Find("\\", pt+1);
             CString path;
      while(pt != -1 && pt<=end)
      {
      path = pathname.Left(pt+1);
      if(_access(path, 0) == -1)
      _mkdir(path);
       pt = pathname.Find("\\", pt+1);
      }
     return true;
    }

    DWORD dwAttrs;
    dwAttrs = GetFileAttributes("c:\\boot.ini");
    if (dwAttrs & FILE_ATTRIBUTE_READONLY)
    {
    //只读
    }

    其他属性还有:
    FILE_ATTRIBUTE_HIDDEN
    FILE_ATTRIBUTE_DIRECTORY


    可以用"&"位操作来区分;  
      比如你向知道到底是不是目录,可以这样:  
       
      dwAttr=GetFileAttributes(LPCTSTR   lpFileName);  
       
      if((dwAttr&FILE_ATTRIBUTE_DIRECTORY)==0)//不是目录  
      ;  
      else//是目录  
      ;  
     

  • 相关阅读:
    这是一棵树吗
    感染者
    es6 语法
    css3 flex 详解,可以实现div内容水平垂直居中
    移动端实现复制内容至剪贴板小例子
    jq+mui 阻止事件冒泡
    移动端H5 判断IOS还是Android 平台
    移动端布局 rem,和px
    关于H5移动端开发 iPhone X适配
    H5 微信公众号 监听返回事件
  • 原文地址:https://www.cnblogs.com/shengshuai/p/mfcattvibs.html
Copyright © 2011-2022 走看看