⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utilclass.cpp

📁 这是一个软件水平资格考试中使用的CASL汇编语言的编译器,实现文件中包括一个编译器,一个虚拟机,一个类似于Debug的调试器.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////
//函数名称:RemoveFolder
//函数功能:--------------------删除指定目录------------------------------
//入口参数:const CString& argFolder----------待删除目录
//出口参数:无
//返回值:无
//开发人员:杨军
//开发日期:2004-5-26
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
bool CUtilClass::RemoveFolder(const CString& argFolder) 
{
  //------------------变量定义部分  begins------------------------------
  CString strFileName(_T(""));

  WIN32_FIND_DATA findData;
  HANDLE hFindFile = INVALID_HANDLE_VALUE;
  //------------------变量定义部分  ends--------------------------------

  if (argFolder.Right(1).Compare("\\"))
  {
    strFileName = argFolder + _T("\\*.*");
  }
  else
  {
    strFileName = argFolder + _T("*.*");
  }

  hFindFile = FindFirstFile(strFileName, &findData);
  
  //打开搜索Handle失败
  if (INVALID_HANDLE_VALUE == hFindFile)
  {
    return false;
  }

  //递归删除目录中所有的文件及子目录 
  while (INVALID_HANDLE_VALUE != hFindFile)
  {
    //如果是查找到了系统目录"."或".."则直接跳过,查找下一个文件
    if (!strcmp(findData.cFileName, _T(".")) || !strcmp(findData.cFileName, _T("..")))
    {
      if (!FindNextFile(hFindFile, &findData))
      {
        if (GetLastError() != ERROR_NO_MORE_FILES)
        {
          goto RemoveFolder_Failed;
        }
        else
        {
          break;
        }
      }      
      continue;
    }
    //如果找到的是一个文件夹,则递归调用自身删除之
    //为保证不论文件为任何一方类型均可被删除,将文件类型设为普通文件
    SetFileAttributes(findData.cFileName, FILE_ATTRIBUTE_NORMAL);
    
    if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
       //删除子文件夹中的内容失败的话
      if (!RemoveFolder(CUtilClass::ConcatFolder(argFolder, findData.cFileName)))
      {
        goto RemoveFolder_Failed;
      }
    }
    else
    {
      //如果找到的是一个文件,则直接删除
      
      if (!DeleteFile(CUtilClass::ConcatFolder(argFolder, findData.cFileName)))
      {
        goto RemoveFolder_Failed;
      }
    }

    //查找下一个文件
    if (!FindNextFile(hFindFile, &findData))
    {
      if (GetLastError() != ERROR_NO_MORE_FILES)
      {
        goto RemoveFolder_Failed;
      }
      else
      {
        break;
      }
    }
  }

  //删除前需要先关闭查找句柄,否则会出现访问冲突
  FindClose(hFindFile);

  //删除目录
  if (!RemoveDirectory(argFolder))
  {
    goto RemoveFolder_Failed;
  }


  return true;

RemoveFolder_Failed:
 
  FindClose(hFindFile);
  return false;
  
}


/////////////////////////////////////////////////////////////////////////
//函数名称:ConcatFolder
//函数功能:--------------------将两个目录连接起来--------------------------------------------------------------
//入口参数:CString argLeft---------------结果目录左边的内容
//          CString argRight--------------结果目录右边的内容
//出口参数:无
//返回值:CString---------------------------连接后的结果目录
//开发人员:杨军
//开发日期:2004-5-27
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CString CUtilClass::ConcatFolder(CString argLeft, CString argRight) 
{
  if (argLeft.Right(1).Compare(_T("\\")))
  {
    return argLeft + _T("\\") + argRight;
  }
  else
  {
    return argLeft + argRight;
  }
}


/////////////////////////////////////////////////////////////////////////
//函数名称:GetRelativePath
//函数功能:--------------------得到字符串argOriginalPath中存放的全路径相对于argReferPath中存放的路径的相对路径-----------------
//入口参数:CString argReferPath------------------------参照路径 
//          CString argOriginalPath---------------------需要得到相对路径的路径
//出口参数: CString& argRetPath--------------------得到的相对路径结果
//返回值: UTIL_STATUS----------标识操作状态,UTIL_OK表示操作成功
//开发人员:杨军
//开发日期:2004-5-30
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CUtilClass::UTIL_STATUS CUtilClass::GetRelativePath(CString argReferPath, CString argOriginalPath, CString& argRetPath) 
{
  string sTemp;
  UTIL_STATUS utSTRet = CUtilClass::GetRelativePath(string(argReferPath), string(argOriginalPath), sTemp);

  argRetPath =  sTemp.c_str();

  return utSTRet;
}


/////////////////////////////////////////////////////////////////////////
//函数名称:GetAbsolutePath
//函数功能:------------------得到工程中文件中源文件的绝对路径----------------------
//入口参数:CString argProjectFileName-----------工程文件的文件名(含路径)
//          CString argSrcFileName---------------源文件的相对路径文件名
//出口参数:无
//返回值:CString-----------------------------源文件的绝对真理路径文件名
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CString CUtilClass::GetAbsolutePath(CString argProjectFileName, CString argSrcFileName) 
{
  CString strAbsolutePath;
  int iIndex = 0;

  iIndex = argProjectFileName.ReverseFind('\\');
 
  if (iIndex < 0)
  {
    iIndex = argProjectFileName.ReverseFind('/');
    if (iIndex < 0)
    {
      return argSrcFileName;
    }
  } 

  strAbsolutePath = argProjectFileName.Mid(0, iIndex);

  return strAbsolutePath + _T("\\") + argSrcFileName;
}


/////////////////////////////////////////////////////////////////////////
//函数名称:CheckExeFileVersion
//函数功能:-----------------检查Casl源文件对应的可执行文件的版本---------------
//入口参数:CString argSrcFile-----------源文件的全路径名
//出口参数:无
//返回值:int---------------------- = 0 表示源文件与可执行文件版本相同
//                                 > 0 表示源文件比目录文件版本要新
//                                 < 0 表示源文件比目标文件版本要旧
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CUtilClass::CheckExeFileVersion(CString argSrcFile) 
{
  //------------------变量定义部分  begins------------------------------
  CString strExeFileName;
  CFileStatus exeFileStatus;
  CFileStatus srcFileStatus;
  CFileFind finder;

  int iIndex = argSrcFile.ReverseFind('.');
  //------------------变量定义部分  ends--------------------------------

  if (iIndex < 0)
  {
    return 0;
  }

  //得到源文件所在目录下对应的可执行文件名
  strExeFileName = argSrcFile.Mid(0, iIndex);
  strExeFileName = strExeFileName + _T(".cse");

  //检查源文件是否存在
  
  //如果源文件不存在
  if (!finder.FindFile(argSrcFile))
  {
    return 0;
  }

  //检查可执行文件是否存在

  if (!finder.FindFile(strExeFileName))
  {
    return 1;
  }

  //获得源文件,可执行文件的文件状态信息
  if (CFile::GetStatus(argSrcFile, srcFileStatus) &&  CFile::GetStatus(strExeFileName, exeFileStatus))
  {
    //如果源文件与可执行文件的最后一次修改的时间相同
    if (srcFileStatus.m_mtime == exeFileStatus.m_mtime)
    {
      return 0;
    }
    //如果源文件的最后一次修改的时间 > 可执行文件的最后一次修改的时间
    else if (srcFileStatus.m_mtime > exeFileStatus.m_mtime)
    {
      return 1;
    }
    //如果源文件的最后一次修改的时间  < 可执行文件的最后一次修改的时间
    else
    {
      return -1;
    }
  }
  else
  {
    return 0;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -