声明:
1 /************************************************************************/
2 /** 系统全局函数
3 /************************************************************************/
4
5 #pragma once
6
7 #include <string>
8
9 // 取得应用程序路径(末尾带 '\' 的)
10 CString ExtractFilePath(void);
11 // 取得应用程序路径(末尾不带 '\' 的)
12 CString ExtractFileDir(void);
13 // 取得指定文件的目录(参数为文件的完整路径,返回值末尾不带 '\' 的)
14 CString GetFileDir(const CString& csFullFileName);
15 // 取得指定文件的目录(参数为文件的完整路径,返回值末尾带 '\' 的)
16 CString GetFilePath(const CString& csFullFileName);
17 // 将CString转换成string(将Unicode串转换成Ansi(返回string))
18 std::string ConvertW2A(const CString& csString);
19 // 将路径中的指定字符用另外的指定字符替换,并返回(string)
20 std::string StringReplace(const char* pszString, const char cSourceChar, const char cDestChar);
实现:
1 #include "stdafx.h"
2 #include "GlobalFunction.h"
3 #include <atlconv.h>
4
5 CString ExtractFileDir(void)
6 {
7 CString csResult;
8 WCHAR pszExeFullPath[MAX_PATH];
9 ::GetModuleFileName(NULL, pszExeFullPath, MAX_PATH);
10 csResult = pszExeFullPath;
11 int iPos = csResult.ReverseFind('\\');
12 csResult = csResult.Left(iPos);
13 return csResult;
14 }
15
16 CString ExtractFilePath(void)
17 {
18 CString csResult = ExtractFileDir();
19 if (csResult.GetLength() > 0)
20 return csResult + L"\\";
21 return csResult;
22 }
23
24 CString GetFileDir(const CString& csFullFileName)
25 {
26 if (!::PathFileExists(csFullFileName))
27 return CString(L"");
28
29 CString csResult(csFullFileName);
30 int iPos = csResult.ReverseFind('\\');
31 csResult = csResult.Left(iPos);
32 return csResult;
33 }
34
35 CString GetFilePath(const CString& csFullFileName)
36 {
37 CString csResult = GetFileDir(csFullFileName);
38 if (csResult.GetLength() > 0)
39 csResult + "\\";
40 return csResult;
41 }
42
43 std::string ConvertW2A(const CString& csString)
44 {
45 USES_CONVERSION;
46 return std::string(W2A(csString));
47 }
48
49 std::string StringReplace(const char* pszString, const char cSourceChar, const char cDestChar)
50 {
51 if (strlen(pszString) == 0)
52 return std::string("");
53 const UINT iLen = strlen(pszString) + 1;
54 char* pszTargetString = new char[iLen];
55 //char pszTargetString[iLen];
56 try
57 {
58 strncpy(pszTargetString, pszString, iLen);
59 for (int iIndex = 0; iIndex != iLen; iIndex++)
60 {
61 if (pszTargetString[iIndex] == cSourceChar)
62 pszTargetString[iIndex] = cDestChar;
63 }
64 delete [] pszTargetString;
65 return std::string(pszTargetString);
66 }
67 catch ()
68 {
69 delete [] pszTargetString;
70 return std::string("");
71 }
72 }