热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MFC常用小工具函数

1、判断文件是否存在boolIsFileExist(CStringsFileName){CFileFile;if(TRUE!File.Open(sFileName,CFile:

1、判断文件是否存在

bool IsFileExist(CString sFileName)
{CFile File;if (TRUE != File.Open(sFileName, CFile::modeRead)){return false;}return true;
}

1、判断文件夹是否为空

int CountDirectory(CString path)
{int count = 0;CFileFind finder;BOOL working = finder.FindFile(path + _T("\\*.*"));while (working){working = finder.FindNextFile();if (finder.IsDots())continue;if (finder.IsDirectory())count += CountDirectory(finder.GetFilePath());elsecount++;}return count;
}

2、判断目录是否存在

bool CLib_Global::IsPathExist(const CString sPathName)
{WIN32_FIND_DATA wfd;bool rValue = false;HANDLE hFind = FindFirstFile(sPathName, &wfd);if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){rValue = true;}FindClose(hFind);return rValue;
}

3、从全文件路径中找到带后缀的文件名

CString CLib_Global::GetTitleFileName(const CString sFileName)
{CString sRt = sFileName;const TCHAR cSeparator = _T('\\');CString sTempName = sFileName;sTempName.Replace(_T('/'), cSeparator); //有些路径是反斜杠,必须校正简化int nFind = sTempName.ReverseFind(cSeparator);if (nFind >= 0 && nFind}

4、从全文件路径中找到路径名(不含)

CString CLib_Global::GetFilePath(const CString sFileName)
{CString sRt;const TCHAR cSeparator = _T('\\');CString sTempName = sFileName;sTempName.Replace(_T('/'), cSeparator); //有些路径是反斜杠,必须校正简化int nFind = sTempName.ReverseFind(cSeparator);if (nFind>=0 && nFind}

5、取文件后缀

CString CLib_Global::GetFileExtName(CString sFileName)
{CString sExt;const int nFindIndex = sFileName.ReverseFind(_T('.'));if (nFindIndex > 0 &&sFileName.GetLength() - 1 != nFindIndex){sExt = sFileName.Mid(nFindIndex + 1);}return sExt;
}

6、MFC判断文件夹路径是否存在以及创建文件夹的方法

PathIsDirectory() 检测路径是否存在
CreateDirectioy() 创建文件夹
两个函数需要使用shlwapi.h头文件以及添加shlwapi.lib或shlwapi.dll 库函数

7、平面坐标下计算外包类

// Summary: 平面坐标系下的外包立方体,横平竖直
class CHCExtent
{
public:CHCExtent(){m_bIsEmpty = true;}void AddPoint(const AcGePoint3d& pt){if(m_bIsEmpty){m_min.x = m_max.x = pt.x;m_min.y = m_max.y = pt.y;m_min.z = m_max.z = pt.z;m_bIsEmpty = false;}else{m_min.x = min(m_min.x, pt.x);m_min.y = min(m_min.y, pt.y);m_min.z = min(m_min.z, pt.z);m_max.x = max(m_max.x, pt.x);m_max.y = max(m_max.y, pt.y);m_max.z = max(m_max.z, pt.z);}}void AddExtent(const CHCExtent& other){if(other.m_bIsEmpty)return;if(m_bIsEmpty)*this = other;else{m_min.x = min(m_min.x, other.m_min.x);m_min.y = min(m_min.y, other.m_min.y);m_min.z = min(m_min.z, other.m_min.z);m_max.x = max(m_max.x, other.m_max.x);m_max.y = max(m_max.y, other.m_max.y);m_max.z = max(m_max.z, other.m_max.z);}}public:bool m_bIsEmpty;AcGePoint3d m_min;AcGePoint3d m_max;
};

8、判断是否是数字

bool IsNumber(CString sNumber)
{if (sNumber.IsEmpty())return false;if (sNumber[0] == '-'){sNumber = sNumber.Mid(1);if (sNumber.IsEmpty())return false;}int nDotCount = 0;for (int i = 0; i '9'))return false;}if (nDotCount > 1)return false;return true;
}

9、删除文件夹及其里面的所有内容

void myDeleteDirectory(CString directory_path) //删除一个文件夹下的所有内容
{ CFileFind finder;CString path;path.Format("%s/*.*",directory_path);BOOL bWorking = finder.FindFile(path);while(bWorking){bWorking = finder.FindNextFile();if(finder.IsDirectory() && !finder.IsDots()){//处理文件夹myDeleteDirectory(finder.GetFilePath()); //递归删除文件夹RemoveDirectory(finder.GetFilePath());}else{//处理文件DeleteFile(finder.GetFilePath());}}
}

10、CList设定水平拖动

void SetHorizontalScroll()
{CDC* dc = GetDC();SIZE s;int index;CString str;long temp;for (index = 0; indexGetTextExtent(str, str.GetLength() + 1); // 获取字符串的像素大小// 如果新的字符串宽度大于先前的水平滚动条宽度,则重新设置滚动条宽度// IDC_LISTBOX为m_List的资源IDtemp = (long)SendDlgItemMessage(IDC_LIST_LOG, LB_GETHORIZONTALEXTENT, 0, 0); //temp得到滚动条的宽度if (s.cx > temp){SendDlgItemMessage(IDC_LIST_LOG, LB_SETHORIZONTALEXTENT, (WPARAM)s.cx, 0);}}ReleaseDC(dc);
}

11 、利用分隔符分隔字符串

//字符串处理部分
void GetStrArrayFromString(TCHAR cSeparator, CStringArray &saTag, CString sSource)
{saTag.RemoveAll();int nPreIndex=-1, nNextIndex;while((nNextIndex=sSource.Find(cSeparator, nPreIndex+1))>-1){CString sName = sSource.Mid(nPreIndex+1, nNextIndex-nPreIndex-1);saTag.Add(sName );nPreIndex = nNextIndex;}//允许最后以逗号或不以逗号结尾int nLen = sSource.GetLength();if(nPreIndex+1}

12、是否是文件夹

bool IsDir(LPCTSTR filePath)
{DWORD ftyp = GetFileAttributes(filePath);if (ftyp & FILE_ATTRIBUTE_DIRECTORY){// 这是一个文件夹return true;}return false;
}

12、是否是大文件

bool IsBigFile(std::string sName)
{wstring wsName &#61; string2wstring(sName);CString strName &#61; wsName.c_str();const char* cName &#61; sName.c_str();FILE* m_fp;errno_t err &#61; fopen_s(&m_fp, cName, "rb");if (err !&#61; 0){CString sMsg;sMsg.Format(_T("文件“%s”打开失败&#xff0c;错误码&#xff1a;0x%X"),strName, GetLastError());AfxMessageBox(sMsg);return false;}fseek(m_fp, 0, SEEK_END);long uTotalSize &#61; ftell(m_fp);fseek(m_fp, 0, SEEK_SET);if (uTotalSize <5) // 小于5字节认为空文件{CString sMsg;sMsg.Format(_T("文件“%s”为空&#xff0c;请检查文件&#xff01;"),strName);AfxMessageBox(sMsg);fclose(m_fp);m_fp &#61; NULL;return false;}// 大于100M定义为大文件if (uTotalSize > 100 * 1024 *1024){fclose(m_fp);m_fp &#61; NULL;return true;}fclose(m_fp);m_fp &#61; NULL;return false;
}


推荐阅读
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
author-avatar
多米音乐_35562359
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有