c++ / c# 怎么从一个路径的string获取最后一个“\”之后的字符... C#中调用C++写的dll 中一个返回string的函数,结...

string\u7c7b\u578b\u7684\u5b57\u7b26\u4e32\uff0c\u5982\u4f55\u53bb\u6389\u672b\u5c3e\u7684\u6362\u884c\u7b26\r

#include
using namespace std;
int main()
{
string s = "ancdr"; //\u4e3a\u4e86\u65b9\u4fbf\u8c03\u8bd5\u89c2\u5bdf\uff0c\u6539\u6210\u4e86r\uff0c\u4e00\u6837\u7684
//s.assign(s,0,4); //\u65b9\u6cd51\uff1a\u628a\u5b57\u7b26\u4e32s\u4e2d\u4ece0\u5f00\u59cb\u76844\u4e2a\u5b57\u7b26\u8d4b\u7ed9\u5f53\u524d\u5b57\u7b26\u4e32
s.erase(4,1); //\u65b9\u6cd52\uff1a\u628a\u5b57\u7b26\u4e32s\u4e2d\u4ece\u7b2c4\u4e2a\u5f00\u59cb\u76841\u4e2a\u5b57\u7b26\u5220\u9664\u3002
return 0;
}
\u4e24\u79cd\u65b9\u6cd5\u90fd\u53ef\u4ee5\u3002

\u4ee5\u524d\u9047\u5230\u8fc7\u8fd9\u6837\u7684\u60c5\u51b5\uff0c\u662fC++\u7684\u7f16\u7801\u548cC#\u7684\u7f16\u7801\u4e0d\u4e00\u81f4\u5bfc\u81f4\u7684\uff0c\u4e24\u4e2a\u5f97\u7528\u540c\u4e00\u79cd\u7f16\u7801\u89c4\u5219\u624d\u53ef\u4ee5\u3002

c++\u7684\u9ed8\u8ba4\u7f16\u7801\u597d\u50cf\u662fAnsy\uff0cC#\u7684\u662funicode\u3002

CString strRecieveStr;
for(i=0;i<m_RecieveFrameHead.i16BufLenth;i++)
{
m_RecieveFrameHead.bDataBuf[i]=pFrameHeadStr->bDataBuf[i];
}
m_RecieveFrameHead.bDataBuf[i]=0;

strRecieveStr.Format("%s",m_RecieveFrameHead.bDataBuf);
\u4f60\u628a\u8fd4\u56de\u7684\u6570\u636e\u5148\u8f6c\u6210CString\u7684\u3002\u5e94\u8be5\u5c31\u53ef\u4ee5\u4e86\u3002
\u4e0a\u9762\u7684\u4ee3\u7801\u662f\u6211\u4ee5\u524d\u4e00\u4e2a\u9879\u76ee\u4e2d\u7684\uff0c\u5f88\u957f\u65f6\u95f4\u4e86\uff0cm_RecieveFrameHead\u5c31\u662fC#\u4f20\u6765\u7684\u6570\u636e\uff0c\u8981\u8f6c\u6210CString\u7684\u5c31\u53ef\u4ee5\u4e86\u3002

问的是怎么调用还是相应成员函数/方法的内部实现?
如果是问调用的话,MFC是调用CString的成员函数,即ReverseFind('\\'),根据返回的索引值进行相应判断和处理。
C#是取split后的string数组的最后一个元素(string),注意处理空字符串的问题。
另外,务必注意反斜杠的转义字符表示法。
也就是说问题中的第一个字符串应该这样定义
string folder = "C:\\Users\\Desktop";

使用char类型的反斜杠时也应表示为'\\'

其实Windows有一个函数叫PathFindFileName
比如
LPTSTR szFullPath = _T("C:\Users\Desktop\ReadMe.txt");
那么
LPTSTR szFile = PathFindFileName(szFullPath);
调用之后szFile就是 ReadMe.txt 了

头文件Shlwapi.h,库文件Shlwapi.lib
多方便。

C#同理

string filename = System.IO.Path.GetFileName("C:\Users\Desktop\ReadMe.txt");

!!!
用 IndexOf / LastIndexOf

反向搜索也许,GetCharAt(int index) 之类的,从字符串长度-1位置开始检索,每次索引减一
看这个char是不是 '\\',就能确定位置了

使用一个while循环从字符串后面往前找找到第一个/,然后记住位置,往后拷贝字符串就好了

int p=s.Length-1;
while (p>=0 && s[p]!='\') p--;

if (p>-1) path=s.Substring(p, s.Length-p); // 123\abc

扩展阅读:www.sony.com.cn ... c# hashset ... c5b9排除tma的可能 ... c# action ... c++教程 ... 什么情况需要检查c5b-9 ... c++软件 ... c# sunnyui ... c# 延时 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网