MFC中文件及目录操作

来源:互联网 发布:ubuntu修复系统 编辑:程序博客网 时间:2024/05/23 19:47

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

要获得程序运行的路径的一个函数:

  CString   CXXXXXXApp::GetCurDir()  
  {  
    TCHAR   sDrive[_MAX_DRIVE];  
    TCHAR   sDir[_MAX_DIR];  
    TCHAR   sFilename[_MAX_FNAME],Filename[_MAX_FNAME];  
    TCHAR   sExt[_MAX_EXT];  
    GetModuleFileName(AfxGetInstanceHandle(),   Filename,   _MAX_PATH);  
    _tsplitpath(Filename,   sDrive,   sDir,   sFilename,   sExt);  
    CString   homeDir(CString(sDrive)   +   CString(sDir));  
    int   nLen   =   homeDir.GetLength();  
    if(homeDir.GetAt(nLen-1)   !=   _T('//'))  
      homeDir   +=   _T('//');  
    return   homeDir;  
  }  


  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+"
//"+Sr.cFileName);
          }
        else
        {
::SetFileAttributes(dir+"
//"+Sr.cFileName,0);
        ::DeleteFile(dir+"
//"+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;
}