📄 ulexplorerview.cpp
字号:
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString tmp = m_ShellList.GetItemText(idx, 0);
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
CFileViewDlg FileDlg;
FileDlg.SetFilePath(Path+tmp);
FileDlg.DoModal();
}
// 文件剪切
void CULExplorerView::OnFileCut()
{
// TODO: 在此添加命令处理程序代码
}
// 文件复制
void CULExplorerView::OnFileCopy()
{
// TODO: 在此添加命令处理程序代码
}
// 文件改名
void CULExplorerView::OnFileRename()
{
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString tmp = m_ShellList.GetItemText(idx, 0);
CNewDlg Dlg;
Dlg.SetText(tmp);
if (Dlg.DoModal()==IDCANCEL)
return;
CString NewName = Dlg.GetText();
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
if (theFileSys.Rename(Path+tmp, NewName)<0)
Waring("文件重命名失败");
else
ShowDentryList(Path);
}
// 删除文件
void CULExplorerView::OnFileDelete()
{
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString tmp = m_ShellList.GetItemText(idx, 0);
if( AfxMessageBox("确定删除", MB_OKCANCEL) == IDOK )
{
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
int Ret = theFileSys.Delete(Path + tmp);
if (Ret<0)
{
Waring("删除目录失败");
return;
}
ShowDentryList(Path);
}
}
// 导入文件
void CULExplorerView::OnMenuImport()
{
CFileDialog FileDlg(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT, "文件 (*.*)|*.*|");
if (FileDlg.DoModal()==IDOK)
{
CString FileName = FileDlg.GetFileName();
if ( IsExist(FileName) )
{
Waring("已有同名文件啦");
return;
}
CFile srcFile;
CFileException Ex;
if (!srcFile.Open(FileDlg.GetPathName(), CFile::modeRead, &Ex))
{
TCHAR szError[1024];
Ex.GetErrorMessage(szError, 1024);
CString Error;
Error.Format("Windows文件打开错误:%s",szError);
Waring(Error);
return;
}
if ( srcFile.GetLength() > 10*1024*1024 )
{
Waring("导入文件大小超限");
return;
}
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
int hFile = theFileSys.Open(Path+FileName, O_CREAT|O_RDWR, 0);
if (hFile<0)
{
Waring("新建文件失败");
srcFile.Close();
return;
}
char buffer[4096];
long Read, Write;
do
{
Read = srcFile.Read(buffer, 4096);
Write = theFileSys.Write(hFile, buffer, Read);
TRACE("读入%d, 写入%d\n",Read, Write);
if (Write<Read)
{
theFileSys.Close(hFile);
theFileSys.Delete(Path+FileName);
srcFile.Close();
Waring("导入文件失败");
return;
}
}
while (Read > 0);
theFileSys.Close(hFile);
theFileSys.Sync();
srcFile.Close();
ShowDentryList(Path);
}
}
// 导出文件
void CULExplorerView::OnMenuOutport()
{
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString srcFileName = m_ShellList.GetItemText(idx, 0);
CFileDialog FileDlg(FALSE, NULL, srcFileName,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "文件 (*.*)|*.*|");
if (FileDlg.DoModal()==IDOK)
{
CString dstFileName = FileDlg.GetPathName();
CFile srcFile;
CFileException Ex;
if (!srcFile.Open(dstFileName, CFile::modeCreate|CFile::modeWrite, &Ex))
{
TCHAR szError[1024];
Ex.GetErrorMessage(szError, 1024);
CString Error;
Error.Format("Windows文件打开错误:%s",szError);
Waring(Error);
return;
}
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
int hFile = theFileSys.Open(Path+srcFileName, O_RDONLY, 0);
if (hFile<0)
{
Waring("打开文件失败");
srcFile.Close();
return;
}
char buffer[4096];
DWORD dwRead;
do
{
dwRead = theFileSys.Read(hFile, buffer, 4096);
srcFile.Write(buffer, dwRead);
}
while (dwRead > 0);
theFileSys.Close(hFile);
theFileSys.Sync();
srcFile.Close();
}
}
// 临时导出执行
void CULExplorerView::OnMenuExecute()
{
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString srcFileName = m_ShellList.GetItemText(idx, 0);
TCHAR szPath[MAX_PATH];
if (!GetTempPath(MAX_PATH, szPath))//得到系统临时目录
{
Waring("无法获得系统临时目录");
return;
}
CString TempPath = szPath;
CString dstFilePath = TempPath + srcFileName;
CFile srcFile;
CFileException Ex;
if (!srcFile.Open(dstFilePath, CFile::modeCreate|CFile::modeWrite, &Ex))
{
TCHAR szError[1024];
Ex.GetErrorMessage(szError, 1024);
CString Error;
Error.Format("Windows文件打开错误:%s",szError);
Waring(Error);
return;
}
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
int hFile = theFileSys.Open(Path+srcFileName, O_RDONLY, 0);
if (hFile<0)
{
Waring("打开文件失败");
srcFile.Close();
return;
}
char buffer[4096];
DWORD dwRead;
do
{
dwRead = theFileSys.Read(hFile, buffer, 4096);
srcFile.Write(buffer, dwRead);
}
while (dwRead > 0);
theFileSys.Close(hFile);
theFileSys.Sync();
srcFile.Close();
ShellExecute(this->m_hWnd, "open", dstFilePath, "", "", SW_SHOW );
}
// 打开目录
void CULExplorerView::OnDentryOpen()
{
if ( !theFileSys.IsVDiskLoaded() )
return;
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString tmp = m_ShellList.GetItemText(idx, 0);
TRACE("CULExplorerView::OnDoubleClickList = %s\n",tmp);
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
if ( tmp=="." )
{
return;
}
else if ( tmp==".." )
{
m_pPaneFolders->SelectParentItem();
return;
}
else
{
CString str = Path + tmp + "/";
m_pPaneFolders->ExpandDentryTree(str);
}
}
// 目录改名
void CULExplorerView::OnDentryRename()
{
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString tmp = m_ShellList.GetItemText(idx, 0);
CNewDlg Dlg;
Dlg.SetText(tmp);
if (Dlg.DoModal()==IDCANCEL)
return;
CString NewName = Dlg.GetText();
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
if (theFileSys.Rename(Path+tmp, NewName)<0)
Waring("目录重命名失败");
else
ShowDentryList(Path);
m_pPaneFolders->ShowDentryTree();
m_pPaneFolders->ExpandDentryTree(Path);
}
// 目录删除
void CULExplorerView::OnDentryDelete()
{
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
CString tmp = m_ShellList.GetItemText(idx, 0);
if( AfxMessageBox("确定删除", MB_OKCANCEL) == IDOK )
{
CString Path = ((CMainFrame*)AfxGetMainWnd())->GetCurPath();
int Ret = theFileSys.RemoveFolder(Path + tmp);
if (Ret<0)
{
Waring("删除目录失败");
return;
}
m_pPaneFolders->ShowDentryTree();
m_pPaneFolders->ExpandDentryTree(Path);
}
}
// 判断文件是否存在
BOOL CULExplorerView::IsExist(CString Path)
{
for (int i=0; i<m_FileArray.GetCount(); i++)
{
FIND_DATA& pff = m_FileArray.ElementAt(i);
if ( pff.ff_mode != S_IFDIR )
{
if (!strcmp(pff.ff_name, Path))
return TRUE;
}
}
return FALSE;
}
void CULExplorerView::ClearAll(void)
{
m_FileArray.RemoveAll();
m_ShellList.DeleteAllItems();
}
void CULExplorerView::Delete(void)
{
POSITION pos = m_ShellList.GetFirstSelectedItemPosition();
int idx = m_ShellList.GetNextSelectedItem(pos);
if (idx < 0)
return;
if (m_FileArray.IsEmpty())
return;
if ( m_FileArray.GetAt(idx).ff_mode == S_IFDIR )
{
OnDentryDelete();
}
else
{
OnFileDelete();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -