CString是一个文件路径,获取文件路径\前的数据
时间: 2024-05-12 08:13:13 浏览: 82
你可以使用`CString::ReverseFind`函数来查找最后一个反斜杠字符的位置,然后使用`CString::Left`函数来获取该位置之前的子串。示例如下:
```c++
CString strPath = _T("C:\\Windows\\System32\\notepad.exe");
int nPos = strPath.ReverseFind('\\');
CString strParentPath = strPath.Left(nPos);
```
这样就可以获取到文件路径中最后一个反斜杠字符之前的数据,即`C:\Windows\System32`。需要注意的是,如果文件路径中没有反斜杠字符,则`ReverseFind`函数会返回-1,需要进行错误处理。
相关问题
mfc多文档CViewTree获取文件路径
在MFC多文档应用程序中,CViewTree类通常用于显示文件夹结构。要获取当前选中的文件的路径,可以使用以下代码:
```
// 获取当前选中项
HTREEITEM hItem = GetSelectedItem();
// 获取该项的数据
MY_TREE_DATA* pData = (MY_TREE_DATA*)GetItemData(hItem);
// 获取文件路径
CString strFilePath = pData->strFilePath;
```
其中,MY_TREE_DATA是自定义的树节点数据结构,可以包含文件路径等信息。在CMainFrame类中,可以在OnCreate函数中设置树节点的数据结构:
```
// 设置树节点数据结构
m_wndFileView.SetImageList(&m_FileViewImages, TVSIL_NORMAL);
m_wndFileView.SetItemHeight(18);
m_wndFileView.SetItemData(m_wndFileView.GetRootItem(), (DWORD_PTR)&m_pDocManager);
```
在CViewTree类中,可以在OnSelChanged函数中获取当前选中的文件路径:
```
void CViewTree::OnSelChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// 获取当前选中项
HTREEITEM hItem = GetSelectedItem();
// 获取该项的数据
MY_TREE_DATA* pData = (MY_TREE_DATA*)GetItemData(hItem);
// 获取文件路径
CString strFilePath = pData->strFilePath;
// 将文件路径发送给视图
((CMainFrame*)AfxGetMainWnd())->SendMessage(WM_VIEW_FILE, 0, (LPARAM)(LPCTSTR)strFilePath);
*pResult = 0;
}
```
在CMainFrame类中,可以处理WM_VIEW_FILE消息,以在视图中打开选中的文件:
```
// 处理WM_VIEW_FILE消息
afx_msg LRESULT OnViewFile(WPARAM wParam, LPARAM lParam)
{
CString strFilePath = (LPCTSTR)lParam;
// 打开文件
CDocument* pDoc = m_pDocManager->OpenDocumentFile(strFilePath);
if (pDoc != NULL)
{
// 获取视图
CView* pView = pDoc->GetFirstView();
if (pView != NULL)
{
// 将视图设置为活动视图
SetActiveView(pView);
}
}
return 0;
}
```
CString str,fid; CString str,fid,ftemp; CString temp_big; CStringArray sum,sort_id; UpdateData(true); myfile.Open(_T("book.txt"),CFile::modeRead); myfile.Seek(m_dwPos,CFile::begin); for(int i=0;i<n && myfile.ReadString(str) != FALSE ;i++) { sum.SetAtGrow(i,str); ftemp=strtok(str.GetBuffer(0)," "); fid= strtok(NULL," "); // pNum=(LPSTR)(LPCSTR)str; sort_id.InsertAt(i,fid.Trim()); } myfile.Close(); for(int i=0;i<n;i++) { //GetAt(i)获取指定位置i处的数据,相当于数组下标[] for (int j=0;j<n-i-1;j++) { double pa,pb; pa = _tstof(sort_id.GetAt(j)); pb= _tstof(sort_id.GetAt(j+1)); if (pb<pa) { temp_big=sum.GetAt(j); sum.SetAtGrow(j,sum.GetAt(j+1)); sum.SetAtGrow(j+1,temp_big); } } } myfile.Open(_T("book.txt"),CFile::modeWrite | CFile::modeCreate |CFile::typeText);//open函数需要传两个参数,前一个是文件路径,后一个是文件的打开模式 myfile.SeekToBegin(); for(int i=0;i<n;i++) { myfile.WriteString(sum.GetAt(i)); myfile.WriteString("\n"); } myfile.Close(); OnBnClickedButton2();
这段代码是一个MFC程序,它的作用是读取一个名为"book.txt"的文本文件中的数据,将其中每一行的第二个单词(使用空格作为分隔符)作为关键字进行排序,然后将排序后的结果重新写回到同一个文件中。具体来说,这段代码做了以下几件事情:
1. 声明了一些变量,包括CString类型的str、fid、ftemp和temp_big,以及CStringArray类型的sum和sort_id。其中,CString表示一个字符串对象,CStringArray表示一个字符串数组对象。
2. 调用UpdateData(true)函数,将MFC窗口中的控件数据更新到程序变量中。
3. 调用CFile类的Open()函数打开"book.txt"文件,以只读模式打开,并将文件指针移动到指定位置。
4. 使用循环读取文件中的数据,每次读取一行数据,并将该行数据存入字符串数组sum中。同时,使用strtok()函数将该行数据按空格分割成多个子字符串,并将第二个子字符串存入fid中。然后将fid存入字符串数组sort_id中。
5. 关闭文件。
6. 使用冒泡排序算法对sort_id数组进行排序,同时将sum数组中对应的元素也进行交换。
7. 再次打开"book.txt"文件,以写入模式打开。
8. 使用循环将排序后的数据写回到文件中。
9. 关闭文件。
10. 调用OnBnClickedButton2()函数,该函数可能是用于更新界面显示的。
阅读全文