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//是目录  
  ;  
 

原文地址:https://www.cnblogs.com/shengshuai/p/mfcattvibs.html