C/C++ 常用的函数与方法

1,创建多级目录

#include <string>
#include <direct.h> //_mkdir函数的头文件
#include <io.h>     //_access函数的头文件
using namespace std;
void CreateDir( const char *dir )
{
    int m = 0, n;
    string str1, str2;
    str1 = dir;
    str2 = str1.substr( 0, 2 );
    str1 = str1.substr( 3, str1.size() );
    while( m >= 0 )
    {
        m = str1.find('\\');

        str2 += '\\' + str1.substr( 0, m );    
        n = _access( str2.c_str(), 0 ); //判断该目录是否存在
        if( n == -1 )
        {
            _mkdir( str2.c_str() );     //创建目录
        }

        str1 = str1.substr( m+1, str1.size() );
    }
}
int main(int argc, char* argv[])
{
    char dir[] = "E:\\Demo\\Folder\\subFolder\\my";
    CreateDir( dir );
    return 0;
}
//或者使用WinAPI
MakeSureDirectoryPathExists
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2,获取exe所在目录

#include <Windows.h>
#include <atlstr.h>
void GetExePath(char *pBuffer)
{
    GetModuleFileNameA(NULL,(LPSTR)pBuffer,MAX_PATH);
    PathRemoveFileSpecA(pBuffer);
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3,不区分大小写的strstr

const char * stristr(const char * str1,const char * str2)
{
    char *cp = (char *)str1;
    char *s1, *s2;
    if (!*str2)
        return((char *)str1);
    while (*cp)
    {
        s1 = cp;
        s2 = (char *)str2;
        while (*s1 && *s2 && (!(*s1 - *s2) || !(*s1 - *s2 - 32) || !(*s1 - *s2 + 32))) {
            s1++, s2++;
        }
        if (!*s2)
            return(cp);
        cp++;
    }
    return nullptr;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

4,wstring转string

std::string ConvertWStringToAnsi(std::wstring wstr)
{
    std::string result;
    int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
    if (len <= 0)
        return result;
    char* buffer = new char[len + 1];
    if (buffer == NULL)
        return result;
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
    buffer[len] = '\0';               //字符串断尾
    result.append(buffer);            //赋值
    delete[] buffer;                  //删除缓冲区
    return result;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5,string转wstring

std::wstring ConvertAnsiToWString(std::string str)
{
    std::wstring result;

    int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);
    if (len < 0)
        return result;

    wchar_t* buffer = new wchar_t[len + 1];
    if (buffer == NULL)
        return result;

    MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);

    buffer[len] = '\0';                    //字符串断尾
    result.append(buffer);                 //赋值
    delete[] buffer;                       //删除缓冲区
    return result;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

6,获取注册表值

std::string GetRegValue(int nKeyType, const std::string& strUrl, const std::string& strKey)
{
    std::string strValue("");
    HKEY hKey = NULL;
    HKEY  hKeyResult = NULL;
    DWORD dwSize = 0;
    DWORD dwDataType = 0;
    std::string wstrUrl = strUrl;
    std::string wstrKey = strKey;

    switch (nKeyType)
    {
    case 0:
    {
        hKey = HKEY_CLASSES_ROOT;
        break;
    }
    case 1:
    {
        hKey = HKEY_CURRENT_USER;
        break;
    }
    case 2:
    {
        hKey = HKEY_LOCAL_MACHINE;
        break;
    }
    case 3:
    {
        hKey = HKEY_USERS;
        break;
    }
    case 4:
    {
        hKey = HKEY_PERFORMANCE_DATA;
        break;
    }
    case 5:
    {
        hKey = HKEY_CURRENT_CONFIG;
        break;
    }
    case 6:
    {
        hKey = HKEY_DYN_DATA;
        break;
    }
    case 7:
    {
        hKey = HKEY_CURRENT_USER_LOCAL_SETTINGS;
        break;
    }
    case 8:
    {
        hKey = HKEY_PERFORMANCE_TEXT;
        break;
    }
    case 9:
    {
        hKey = HKEY_PERFORMANCE_NLSTEXT;
        break;
    }
    default:
    {
        return strValue;
    }
    }

    //打开注册表
    if (ERROR_SUCCESS == ::RegOpenKeyEx(hKey, wstrUrl.c_str(), 0, KEY_QUERY_VALUE, &hKeyResult))
    {
        // 获取缓存的长度dwSize及类型dwDataType
        ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, NULL, &dwSize);
        switch (dwDataType)
        {
        case REG_MULTI_SZ:
        {
            //分配内存大小
            BYTE* lpValue = new BYTE[dwSize];
            //获取注册表中指定的键所对应的值
            LONG lRet = ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, lpValue, &dwSize);
            delete[] lpValue;
            break;
        }
        case REG_SZ:
        {
            //分配内存大小
            char * lpValue = new char[dwSize];
            memset(lpValue, 0, dwSize);
            //获取注册表中指定的键所对应的值
            if (ERROR_SUCCESS == ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, (LPBYTE)lpValue, &dwSize))
            {
                strValue = lpValue;
            }
            delete lpValue;
            break;
        }
        default:
            break;
        }
    }   //关闭注册表
    ::RegCloseKey(hKeyResult);
    return strValue;
}

    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105

7,设置注册表值


bool SetRegStrValue(HKEY type,const char *pLocation, const char * szItem,const char * szWriteKey,const char*szValue)
{
    HKEY hkey;//定义有关的hkey,在查询结束时要关闭  
    HKEY hTempKey;
    bool bValue = true;

    if (ERROR_SUCCESS == RegOpenKeyEx(type, pLocation, 0, KEY_SET_VALUE, &hkey))
    {
        if (ERROR_SUCCESS == ::RegCreateKey(hkey, szItem, &hTempKey))
        {
            if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, szWriteKey, 0, REG_SZ, (CONST BYTE*)szValue, strlen(szValue)+1))
            {
                bValue = false;
            }
        }
    }
    ::RegCloseKey(hkey);
    return bValue;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

8,拆分字符串

std::vector<std::string> splitString(std::string srcStr, std::string delimStr,bool repeatedCharIgnored)
{
    std::vector<std::string> resultStringVector;
    std::replace_if(srcStr.begin(), srcStr.end(), [&](const char& c){if(delimStr.find(c)!=std::string::npos){return true;}else{return false;}}/*pred*/, delimStr.at(0));//将出现的所有分隔符都替换成为一个相同的字符(分隔符字符串的第一个)
    size_t pos=srcStr.find(delimStr.at(0));
    std::string addedString="";
    while (pos!=std::string::npos) {
        addedString=srcStr.substr(0,pos);
        if (!addedString.empty()||!repeatedCharIgnored) {
            resultStringVector.push_back(addedString);
        }
        srcStr.erase(srcStr.begin(), srcStr.begin()+pos+1);
        pos=srcStr.find(delimStr.at(0));
    }
    addedString=srcStr;
    if (!addedString.empty()||!repeatedCharIgnored) {
        resultStringVector.push_back(addedString);
    }
    return resultStringVector;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

9,GBK转UTF-8,vs编译的dll给Qt来调用,需要转一个字符集

std::string GBKToUTF8(const std::string& strGBK)
{
    std::string strOutUTF8 = "";
    WCHAR * str1;
    int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
    str1 = new WCHAR[n];
    MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
    n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
    char * str2 = new char[n];
    WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
    strOutUTF8 = str2;
    delete[]str1;
    str1 = NULL;
    delete[]str2;
    str2 = NULL;
    return strOutUTF8;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

10,字符串替换

void string_replace( std::string &strBig, const std::string &strsrc, const std::string &strdst )
{
 std::string::size_type pos = 0;
 std::string::size_type srclen = strsrc.size();
 std::string::size_type dstlen = strdst.size();

 while( (pos=strBig.find(strsrc, pos)) != std::string::npos )
 {
  strBig.replace( pos, srclen, strdst );
  pos += dstlen;
 }
} 
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

11,好用的执行cmd命令

#include <windows.h>

#include <iostream>  
#include <corecrt_io.h>
using namespace std;
// 描述:execmd函数执行命令,并将结果存储到result字符串数组中   
// 参数:cmd表示要执行的命令  
// result是执行的结果存储的字符串数组  
// 函数执行成功返回1,失败返回0    
int execmd(const char* cmd, char* result) {
    char buffer[128];                         //定义缓冲区                          
    FILE* pipe = _popen(cmd, "r");            //打开管道,并执行命令   
    if (!pipe)
        return 0;                      //返回0表示运行失败   

    while (!feof(pipe)) {
        if (fgets(buffer, 128, pipe)) {             //将管道输出到result中   
            strcat(result, buffer);
        }
    }
    _pclose(pipe);                            //关闭管道   
    return 1;                                 //返回1表示运行成功   
}

int main()
{
    char buffer[1024] = {0};
    if (1 == execmd("netsh winsock reset", buffer))
    {
        printf(buffer);
    }
    else
    {
        ::MessageBox(NULL,L"",L"",NULL);
    }
    return 0;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

12,删除所有目录

BOOL IsDirectory(const char *pDir)
{
    char szCurPath[500];
    ZeroMemory(szCurPath, 500);
    sprintf_s(szCurPath, 500, "%s//*", pDir);
    WIN32_FIND_DATAA FindFileData;
    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));

    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData); /**< find first file by given path. */

    if (hFile == INVALID_HANDLE_VALUE)
    {
        FindClose(hFile);
        return FALSE; /** 如果不能找到第一个文件,那么没有目录 */
    }
    else
    {
        FindClose(hFile);
        return TRUE;
    }
}

BOOL DeleteDirectory(const char * DirName)
{
    char szCurPath[MAX_PATH];        //用于定义搜索格式
    _snprintf(szCurPath, MAX_PATH, "%s\\*.*", DirName);    //匹配格式为*.*,即该目录下的所有文件
    WIN32_FIND_DATAA FindFileData;
    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));
    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData);
    BOOL IsFinded = TRUE;
    while (IsFinded)
    {
        IsFinded = FindNextFileA(hFile, &FindFileData);    //递归搜索其他的文件
        if (strcmp(FindFileData.cFileName, ".") && strcmp(FindFileData.cFileName, "..")) //如果不是"." ".."目录
        {
            std::string strFileName = "";
            strFileName = strFileName + DirName + "\\" + FindFileData.cFileName;
            std::string strTemp;
            strTemp = strFileName;
            if (IsDirectory(strFileName.c_str())) //如果是目录,则递归地调用
            {
                printf("目录为:%s/n", strFileName.c_str());
                DeleteDirectory(strTemp.c_str());
            }
            else
            {
                DeleteFileA(strTemp.c_str());
            }
        }
    }
    FindClose(hFile);

    BOOL bRet = RemoveDirectoryA(DirName);
    if (bRet == 0) //删除目录
    {
        printf("删除%s目录失败!/n", DirName);
        return FALSE;
    }
    return TRUE;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

13,copy目录下所有文件到另一个目录下

void CopyFiles(const char* lpPath, const char *pFolder)
{
    char szFind[MAX_PATH] = { 0 };
    WIN32_FIND_DATA FindFileData;

    strcpy(szFind, lpPath);
    strcat(szFind, "\\*.*");

    HANDLE hFind = ::FindFirstFile(szFind, &FindFileData);
    if (INVALID_HANDLE_VALUE == hFind)    return;

    while (true)
    {
        if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if (FindFileData.cFileName[0] != '.')
            {
                char szFile[MAX_PATH];
                strcpy(szFile, lpPath);
                strcat(szFile, (char*)(FindFileData.cFileName));
                CopyFiles(szFile, pFolder);
            }
        }
        else
        {
            //std::cout << FindFileData.cFileName << std::endl;
            std::string strTemp = lpPath;
            strTemp += FindFileData.cFileName;


            std::string strDest = pFolder;
            strDest += FindFileData.cFileName;

            CopyFileA(strTemp.c_str(), strDest.c_str(), FALSE);
        }
        if (!FindNextFile(hFind, &FindFileData))    break;
    }
    FindClose(hFind);
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

程序实现自删除


#include<windows.h>  
#include<ShlObj.h>  
#include <tchar.h>  
#include <shellapi.h>


VOID DelItself()
{
    SHELLEXECUTEINFO stShellDel;
    TCHAR szBat[MAX_PATH];

    //获取文件路径名  
    TCHAR szFileName[MAX_PATH], szComspec[MAX_PATH];
    if ((GetModuleFileName(0, szFileName, MAX_PATH) != 0) &&
        (GetShortPathName(szFileName, szFileName, MAX_PATH) != 0) &&
        (GetEnvironmentVariable("COMSPEC", szComspec, MAX_PATH) != 0))
    {
        lstrcpy(szBat, "/c del ");
        lstrcat(szBat, szFileName);
        lstrcat(szBat, " > nul");

        stShellDel.cbSize = sizeof(stShellDel);

        //命令窗口进程句柄,ShellExecuteEx函数执行时设置。   
        stShellDel.hwnd = 0;
        stShellDel.lpVerb = "Open";
        stShellDel.lpFile = szComspec;
        stShellDel.lpParameters = szBat;
        stShellDel.lpDirectory = NULL;
        stShellDel.nShow = SW_HIDE;

        //设置为SellExecuteEx函数结束后进程退出。   
        stShellDel.fMask = SEE_MASK_NOCLOSEPROCESS;

        //创建执行命令窗口进程。   
        if (ShellExecuteEx(&stShellDel))
        {
            //设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出。   
            SetPriorityClass(stShellDel.hProcess, IDLE_PRIORITY_CLASS);

            //设置本程序进程的执行级别为实时执行,这保证本程序能立即获取CPU执行权,快速退出。   
            SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
            SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

            //通知Windows资源管理器,本程序文件已经被删除。   
            SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, szFileName, 0);
            ExitProcess(0);
        }
    }

}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

清空目录

BOOL EmptyDirectory(const char * lpszPath)
{
    SHFILEOPSTRUCT FileOp;
    ZeroMemory((void *)& FileOp, sizeof(SHFILEOPSTRUCT));
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
    FileOp.hNameMappings = NULL;
    FileOp.hwnd = NULL;
    FileOp.lpszProgressTitle = NULL;
    char tempPath[256] = { 0 };
    //使用通配符
    memcpy(tempPath, lpszPath, strlen(lpszPath)); memcpy(&tempPath[strlen(lpszPath)], "//*", strlen("//*"));
    FileOp.pFrom =tempPath;
    FileOp.pTo = NULL;
    FileOp.wFunc = FO_DELETE;
    return SHFileOperation(&FileOp) == 0;
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

copy 目录

void copydir(char* src, char* dst)
{
    WIN32_FIND_DATAA FindFileData;
    HANDLE hFind;
    char tmpsrc[256];
    strcpy(tmpsrc, src);
    strcat(tmpsrc, "\\*.*");
    hFind = FindFirstFileA(tmpsrc, &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE)
        return;
    CreateDirectoryA(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)
            {
                copydir(newsrc, newdst);
            }
        }
        else
        {
            CopyFileA(newsrc, newdst, false);
        }
    } while (FindNextFileA(hFind, &FindFileData));
    FindClose(hFind);
}   std::string strDest = pFolder;
            strDest += FindFileData.cFileName;

            CopyFileA(strTemp.c_str(), strDest.c_str(), FALSE);
        }
        if (!FindNextFileA(hFind, &FindFileData))    break;
    }
    FindClose(hFind);
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

去除文件目录文件名

1、完整路径,去除后缀名   PathRemoveExtensionA

[cpp] view plain copy
#include <iostream>//cout函数所需  
#include “atlstr.h”  //PathRemoveExtensionA函数所需  

using namespace std;  

void main(void)  
{  
    char buffer_1[] = “C:\\TEST\\sample.txt”;  
    char *lpStr1;  
    lpStr1 = buffer_1;  
    cout << “The path with extension is          : “ << lpStr1 << endl;  
    PathRemoveExtensionA(lpStr1);  
    cout << “\nThe path without extension is       : “ << lpStr1 << endl;  
    system(“pause”);  
}  




OUTPUT:

The path with extension is : C:\TEST\sample.txt
The path without extension is : C:\TEST\sample

2、完整文件路径,获得目录

[cpp] view plain copy
#include <iostream>//cout函数所需
#include “atlstr.h” //PathRemoveFileSpecA函数所需

using namespace std;

void main(void)
{
char buffer_1[] = “C:\TEST\sample.txt”;
char *lpStr1;
lpStr1 = buffer_1;
cout << “The path with file spec is : “ << lpStr1 << endl;
PathRemoveFileSpecA(lpStr1);
cout << “\nThe path without file spec is : “ << lpStr1 << endl;
//注意如果获得了目录,需要得到另一个文件路径时
string filename = lpStr1;
filename = filename + “\samle.txt”;
system(“pause”);
}

OUTPUT:

The path with file spec is : C:\TEST\sample.txt
The path without file spec is : C:\TEST
转载至:https://blog.csdn.net/what951006/article/details/80180248

1,创建多级目录

#include <string>
#include <direct.h> //_mkdir函数的头文件
#include <io.h>     //_access函数的头文件
using namespace std;
void CreateDir( const char *dir )
{
    int m = 0, n;
    string str1, str2;
    str1 = dir;
    str2 = str1.substr( 0, 2 );
    str1 = str1.substr( 3, str1.size() );
    while( m >= 0 )
    {
        m = str1.find('\\');

        str2 += '\\' + str1.substr( 0, m );    
        n = _access( str2.c_str(), 0 ); //判断该目录是否存在
        if( n == -1 )
        {
            _mkdir( str2.c_str() );     //创建目录
        }

        str1 = str1.substr( m+1, str1.size() );
    }
}
int main(int argc, char* argv[])
{
    char dir[] = "E:\\Demo\\Folder\\subFolder\\my";
    CreateDir( dir );
    return 0;
}
//或者使用WinAPI
MakeSureDirectoryPathExists
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2,获取exe所在目录

#include <Windows.h>
#include <atlstr.h>
void GetExePath(char *pBuffer)
{
    GetModuleFileNameA(NULL,(LPSTR)pBuffer,MAX_PATH);
    PathRemoveFileSpecA(pBuffer);
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3,不区分大小写的strstr

const char * stristr(const char * str1,const char * str2)
{
    char *cp = (char *)str1;
    char *s1, *s2;
    if (!*str2)
        return((char *)str1);
    while (*cp)
    {
        s1 = cp;
        s2 = (char *)str2;
        while (*s1 && *s2 && (!(*s1 - *s2) || !(*s1 - *s2 - 32) || !(*s1 - *s2 + 32))) {
            s1++, s2++;
        }
        if (!*s2)
            return(cp);
        cp++;
    }
    return nullptr;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

4,wstring转string

std::string ConvertWStringToAnsi(std::wstring wstr)
{
    std::string result;
    int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
    if (len <= 0)
        return result;
    char* buffer = new char[len + 1];
    if (buffer == NULL)
        return result;
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
    buffer[len] = '\0';               //字符串断尾
    result.append(buffer);            //赋值
    delete[] buffer;                  //删除缓冲区
    return result;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5,string转wstring

std::wstring ConvertAnsiToWString(std::string str)
{
    std::wstring result;

    int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);
    if (len < 0)
        return result;

    wchar_t* buffer = new wchar_t[len + 1];
    if (buffer == NULL)
        return result;

    MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);

    buffer[len] = '\0';                    //字符串断尾
    result.append(buffer);                 //赋值
    delete[] buffer;                       //删除缓冲区
    return result;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

6,获取注册表值

std::string GetRegValue(int nKeyType, const std::string& strUrl, const std::string& strKey)
{
    std::string strValue("");
    HKEY hKey = NULL;
    HKEY  hKeyResult = NULL;
    DWORD dwSize = 0;
    DWORD dwDataType = 0;
    std::string wstrUrl = strUrl;
    std::string wstrKey = strKey;

    switch (nKeyType)
    {
    case 0:
    {
        hKey = HKEY_CLASSES_ROOT;
        break;
    }
    case 1:
    {
        hKey = HKEY_CURRENT_USER;
        break;
    }
    case 2:
    {
        hKey = HKEY_LOCAL_MACHINE;
        break;
    }
    case 3:
    {
        hKey = HKEY_USERS;
        break;
    }
    case 4:
    {
        hKey = HKEY_PERFORMANCE_DATA;
        break;
    }
    case 5:
    {
        hKey = HKEY_CURRENT_CONFIG;
        break;
    }
    case 6:
    {
        hKey = HKEY_DYN_DATA;
        break;
    }
    case 7:
    {
        hKey = HKEY_CURRENT_USER_LOCAL_SETTINGS;
        break;
    }
    case 8:
    {
        hKey = HKEY_PERFORMANCE_TEXT;
        break;
    }
    case 9:
    {
        hKey = HKEY_PERFORMANCE_NLSTEXT;
        break;
    }
    default:
    {
        return strValue;
    }
    }

    //打开注册表
    if (ERROR_SUCCESS == ::RegOpenKeyEx(hKey, wstrUrl.c_str(), 0, KEY_QUERY_VALUE, &hKeyResult))
    {
        // 获取缓存的长度dwSize及类型dwDataType
        ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, NULL, &dwSize);
        switch (dwDataType)
        {
        case REG_MULTI_SZ:
        {
            //分配内存大小
            BYTE* lpValue = new BYTE[dwSize];
            //获取注册表中指定的键所对应的值
            LONG lRet = ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, lpValue, &dwSize);
            delete[] lpValue;
            break;
        }
        case REG_SZ:
        {
            //分配内存大小
            char * lpValue = new char[dwSize];
            memset(lpValue, 0, dwSize);
            //获取注册表中指定的键所对应的值
            if (ERROR_SUCCESS == ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, (LPBYTE)lpValue, &dwSize))
            {
                strValue = lpValue;
            }
            delete lpValue;
            break;
        }
        default:
            break;
        }
    }   //关闭注册表
    ::RegCloseKey(hKeyResult);
    return strValue;
}

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105

7,设置注册表值


bool SetRegStrValue(HKEY type,const char *pLocation, const char * szItem,const char * szWriteKey,const char*szValue)
{
    HKEY hkey;//定义有关的hkey,在查询结束时要关闭  
    HKEY hTempKey;
    bool bValue = true;

    if (ERROR_SUCCESS == RegOpenKeyEx(type, pLocation, 0, KEY_SET_VALUE, &hkey))
    {
        if (ERROR_SUCCESS == ::RegCreateKey(hkey, szItem, &hTempKey))
        {
            if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, szWriteKey, 0, REG_SZ, (CONST BYTE*)szValue, strlen(szValue)+1))
            {
                bValue = false;
            }
        }
    }
    ::RegCloseKey(hkey);
    return bValue;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

8,拆分字符串

std::vector<std::string> splitString(std::string srcStr, std::string delimStr,bool repeatedCharIgnored)
{
    std::vector<std::string> resultStringVector;
    std::replace_if(srcStr.begin(), srcStr.end(), [&](const char& c){if(delimStr.find(c)!=std::string::npos){return true;}else{return false;}}/*pred*/, delimStr.at(0));//将出现的所有分隔符都替换成为一个相同的字符(分隔符字符串的第一个)
    size_t pos=srcStr.find(delimStr.at(0));
    std::string addedString="";
    while (pos!=std::string::npos) {
        addedString=srcStr.substr(0,pos);
        if (!addedString.empty()||!repeatedCharIgnored) {
            resultStringVector.push_back(addedString);
        }
        srcStr.erase(srcStr.begin(), srcStr.begin()+pos+1);
        pos=srcStr.find(delimStr.at(0));
    }
    addedString=srcStr;
    if (!addedString.empty()||!repeatedCharIgnored) {
        resultStringVector.push_back(addedString);
    }
    return resultStringVector;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

9,GBK转UTF-8,vs编译的dll给Qt来调用,需要转一个字符集

std::string GBKToUTF8(const std::string& strGBK)
{
    std::string strOutUTF8 = "";
    WCHAR * str1;
    int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
    str1 = new WCHAR[n];
    MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
    n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
    char * str2 = new char[n];
    WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
    strOutUTF8 = str2;
    delete[]str1;
    str1 = NULL;
    delete[]str2;
    str2 = NULL;
    return strOutUTF8;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

10,字符串替换

void string_replace( std::string &strBig, const std::string &strsrc, const std::string &strdst )
{
 std::string::size_type pos = 0;
 std::string::size_type srclen = strsrc.size();
 std::string::size_type dstlen = strdst.size();

 while( (pos=strBig.find(strsrc, pos)) != std::string::npos )
 {
  strBig.replace( pos, srclen, strdst );
  pos += dstlen;
 }
} 
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

11,好用的执行cmd命令

#include <windows.h>

#include <iostream>  
#include <corecrt_io.h>
using namespace std;
// 描述:execmd函数执行命令,并将结果存储到result字符串数组中   
// 参数:cmd表示要执行的命令  
// result是执行的结果存储的字符串数组  
// 函数执行成功返回1,失败返回0    
int execmd(const char* cmd, char* result) {
    char buffer[128];                         //定义缓冲区                          
    FILE* pipe = _popen(cmd, "r");            //打开管道,并执行命令   
    if (!pipe)
        return 0;                      //返回0表示运行失败   

    while (!feof(pipe)) {
        if (fgets(buffer, 128, pipe)) {             //将管道输出到result中   
            strcat(result, buffer);
        }
    }
    _pclose(pipe);                            //关闭管道   
    return 1;                                 //返回1表示运行成功   
}

int main()
{
    char buffer[1024] = {0};
    if (1 == execmd("netsh winsock reset", buffer))
    {
        printf(buffer);
    }
    else
    {
        ::MessageBox(NULL,L"",L"",NULL);
    }
    return 0;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

12,删除所有目录

BOOL IsDirectory(const char *pDir)
{
    char szCurPath[500];
    ZeroMemory(szCurPath, 500);
    sprintf_s(szCurPath, 500, "%s//*", pDir);
    WIN32_FIND_DATAA FindFileData;
    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));

    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData); /**< find first file by given path. */

    if (hFile == INVALID_HANDLE_VALUE)
    {
        FindClose(hFile);
        return FALSE; /** 如果不能找到第一个文件,那么没有目录 */
    }
    else
    {
        FindClose(hFile);
        return TRUE;
    }
}

BOOL DeleteDirectory(const char * DirName)
{
    char szCurPath[MAX_PATH];        //用于定义搜索格式
    _snprintf(szCurPath, MAX_PATH, "%s\\*.*", DirName);    //匹配格式为*.*,即该目录下的所有文件
    WIN32_FIND_DATAA FindFileData;
    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));
    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData);
    BOOL IsFinded = TRUE;
    while (IsFinded)
    {
        IsFinded = FindNextFileA(hFile, &FindFileData);    //递归搜索其他的文件
        if (strcmp(FindFileData.cFileName, ".") && strcmp(FindFileData.cFileName, "..")) //如果不是"." ".."目录
        {
            std::string strFileName = "";
            strFileName = strFileName + DirName + "\\" + FindFileData.cFileName;
            std::string strTemp;
            strTemp = strFileName;
            if (IsDirectory(strFileName.c_str())) //如果是目录,则递归地调用
            {
                printf("目录为:%s/n", strFileName.c_str());
                DeleteDirectory(strTemp.c_str());
            }
            else
            {
                DeleteFileA(strTemp.c_str());
            }
        }
    }
    FindClose(hFile);

    BOOL bRet = RemoveDirectoryA(DirName);
    if (bRet == 0) //删除目录
    {
        printf("删除%s目录失败!/n", DirName);
        return FALSE;
    }
    return TRUE;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

13,copy目录下所有文件到另一个目录下

void CopyFiles(const char* lpPath, const char *pFolder)
{
    char szFind[MAX_PATH] = { 0 };
    WIN32_FIND_DATA FindFileData;

    strcpy(szFind, lpPath);
    strcat(szFind, "\\*.*");

    HANDLE hFind = ::FindFirstFile(szFind, &FindFileData);
    if (INVALID_HANDLE_VALUE == hFind)    return;

    while (true)
    {
        if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if (FindFileData.cFileName[0] != '.')
            {
                char szFile[MAX_PATH];
                strcpy(szFile, lpPath);
                strcat(szFile, (char*)(FindFileData.cFileName));
                CopyFiles(szFile, pFolder);
            }
        }
        else
        {
            //std::cout << FindFileData.cFileName << std::endl;
            std::string strTemp = lpPath;
            strTemp += FindFileData.cFileName;


            std::string strDest = pFolder;
            strDest += FindFileData.cFileName;

            CopyFileA(strTemp.c_str(), strDest.c_str(), FALSE);
        }
        if (!FindNextFile(hFind, &FindFileData))    break;
    }
    FindClose(hFind);
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

程序实现自删除


#include<windows.h>  
#include<ShlObj.h>  
#include <tchar.h>  
#include <shellapi.h>


VOID DelItself()
{
    SHELLEXECUTEINFO stShellDel;
    TCHAR szBat[MAX_PATH];

    //获取文件路径名  
    TCHAR szFileName[MAX_PATH], szComspec[MAX_PATH];
    if ((GetModuleFileName(0, szFileName, MAX_PATH) != 0) &&
        (GetShortPathName(szFileName, szFileName, MAX_PATH) != 0) &&
        (GetEnvironmentVariable("COMSPEC", szComspec, MAX_PATH) != 0))
    {
        lstrcpy(szBat, "/c del ");
        lstrcat(szBat, szFileName);
        lstrcat(szBat, " > nul");

        stShellDel.cbSize = sizeof(stShellDel);

        //命令窗口进程句柄,ShellExecuteEx函数执行时设置。   
        stShellDel.hwnd = 0;
        stShellDel.lpVerb = "Open";
        stShellDel.lpFile = szComspec;
        stShellDel.lpParameters = szBat;
        stShellDel.lpDirectory = NULL;
        stShellDel.nShow = SW_HIDE;

        //设置为SellExecuteEx函数结束后进程退出。   
        stShellDel.fMask = SEE_MASK_NOCLOSEPROCESS;

        //创建执行命令窗口进程。   
        if (ShellExecuteEx(&stShellDel))
        {
            //设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出。   
            SetPriorityClass(stShellDel.hProcess, IDLE_PRIORITY_CLASS);

            //设置本程序进程的执行级别为实时执行,这保证本程序能立即获取CPU执行权,快速退出。   
            SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
            SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

            //通知Windows资源管理器,本程序文件已经被删除。   
            SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, szFileName, 0);
            ExitProcess(0);
        }
    }

}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

清空目录

BOOL EmptyDirectory(const char * lpszPath)
{
    SHFILEOPSTRUCT FileOp;
    ZeroMemory((void *)& FileOp, sizeof(SHFILEOPSTRUCT));
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
    FileOp.hNameMappings = NULL;
    FileOp.hwnd = NULL;
    FileOp.lpszProgressTitle = NULL;
    char tempPath[256] = { 0 };
    //使用通配符
    memcpy(tempPath, lpszPath, strlen(lpszPath)); memcpy(&tempPath[strlen(lpszPath)], "//*", strlen("//*"));
    FileOp.pFrom =tempPath;
    FileOp.pTo = NULL;
    FileOp.wFunc = FO_DELETE;
    return SHFileOperation(&FileOp) == 0;
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

copy 目录

void copydir(char* src, char* dst)
{
    WIN32_FIND_DATAA FindFileData;
    HANDLE hFind;
    char tmpsrc[256];
    strcpy(tmpsrc, src);
    strcat(tmpsrc, "\\*.*");
    hFind = FindFirstFileA(tmpsrc, &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE)
        return;
    CreateDirectoryA(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)
            {
                copydir(newsrc, newdst);
            }
        }
        else
        {
            CopyFileA(newsrc, newdst, false);
        }
    } while (FindNextFileA(hFind, &FindFileData));
    FindClose(hFind);
}   std::string strDest = pFolder;
            strDest += FindFileData.cFileName;

            CopyFileA(strTemp.c_str(), strDest.c_str(), FALSE);
        }
        if (!FindNextFileA(hFind, &FindFileData))    break;
    }
    FindClose(hFind);
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

去除文件目录文件名

1、完整路径,去除后缀名   PathRemoveExtensionA

[cpp] view plain copy
#include <iostream>//cout函数所需  
#include “atlstr.h”  //PathRemoveExtensionA函数所需  

using namespace std;  

void main(void)  
{  
    char buffer_1[] = “C:\\TEST\\sample.txt”;  
    char *lpStr1;  
    lpStr1 = buffer_1;  
    cout << “The path with extension is          : “ << lpStr1 << endl;  
    PathRemoveExtensionA(lpStr1);  
    cout << “\nThe path without extension is       : “ << lpStr1 << endl;  
    system(“pause”);  
}  




猜你喜欢

转载自blog.csdn.net/qq_35173114/article/details/80859358