📄 webdiskwnd.cpp
字号:
m_pdtcFile->DeleteItem(ChildItem);
}
//strFileNameBunch(文件名串如下排列,中间用'|'分隔
//strFileNameBunch = "123.111|asd.ttt|";
int strLen = strFileNameBunch.GetLength();
CString strFileName;
int i, j;
for(i=0; i<strLen;)
{
j = strFileNameBunch.Find('|', i);
strFileName = strFileNameBunch.Mid(i, j-i);
if((strFileName.Left(1)).Compare(_T("@")) == 0)
{
//"@\建立科技\kjkjk"
int index = strFileName.ReverseFind('\\');
CString str = strFileName.Mid(index+1);
str.Replace("@","");
HTREEITEM ChildItem1;
ChildItem1 = m_pdtcFile->InsertItem(_T(str), 0, 0, root);
// ChildItem1 = m_pdtcFile->InsertItem(NULL, str, 0, 0, NULL, NULL, (LPARAM)p, root, NULL);
RetrieveShareFileList(ChildItem1);
}
else
{
m_pdtcFile->InsertItem(_T(strFileName), 1, 1, root);
}
i=j+1;
}
m_pdtcFile->Expand(root, TVE_EXPAND);
SysFreeString(bstrRootPth);
#if 0
//删除root下的所有节点
if (m_pdtcFile->ItemHasChildren(root))
{
HTREEITEM hNextItem;
HTREEITEM hChildItem = m_pdtcFile->GetChildItem(root);
while (hChildItem != NULL)
{
hNextItem = m_pdtcFile->GetNextItem(hChildItem, TVGN_NEXT);
m_pdtcFile->DeleteItem(hChildItem);
hChildItem = hNextItem;
}
}
//共享文件夹
BSTR bstShareUser = ::SysAllocString(NULL);
CString stShareUser;
m_pService->ShowShare(m_bstrTicket, &bstShareUser);
stShareUser = _com_util::ConvertBSTRToString(bstShareUser);
int i, j;
CString strSingleUser;
CString strU, strF;
//"\个人助理|zzjj*\我的图片\yyy|lyt*\个人助理|zzjj"
for(i=0; i<stShareUser.GetLength();)
{
HTREEITEM ChildUser, ChildFolder;
j = stShareUser.Find('*', i);
strSingleUser = stShareUser.Mid(i, j-i);
int m=0, n=0;
n = strSingleUser.Find('|', m);
strF = strSingleUser.Mid(m, n-m);
m = n+1;
strU = strSingleUser.Mid(m, strSingleUser.GetLength()-m);
HTREEITEM RetItem = FindChildItem(m_pdtcFile, root, strU);
if(RetItem == NULL)
{
ChildUser = m_pdtcFile->InsertItem(strU, 0, 0, root);
}
else
{
ChildUser = RetItem;
}
ChildFolder = m_pdtcFile->InsertItem(strF, 0, 0, ChildUser);
CString strTemp;
strTemp.Format("%s%s", strU, strF);
BSTR bstUser;
bstUser = strTemp.AllocSysString();
BSTR bstRet = ::SysAllocString(NULL);
m_pService->GetShareFile(m_bstrTicket, bstUser, &bstRet);
strTemp = ::_com_util::ConvertBSTRToString(bstRet);
for(int x=0,y=0; x<strTemp.GetLength();)
{
CString strFile;
y = strTemp.Find('|', x);
strFile = strTemp.Mid(x, y-x);
m_pdtcFile->InsertItem(strFile, 1, 1, ChildFolder);
x = y+1;
}
::SysFreeString(bstUser);
::SysFreeString(bstRet);
// m_pdtcFile->GetChildItem
/* if((strFileName.Left(1)).Compare(_T("@")) == 0)
{
CString str = strFileName.Mid(1);
HTREEITEM ChildItem1;
ChildItem1 = m_pdtcFile->InsertItem(_T(str), 0, 0, root);
RetrieveFileList(ChildItem1);
}
else
{
m_pdtcFile->InsertItem(_T(strFileName), 1, 1, root);
}
*/
i=j+1;
}
::SysFreeString(bstShareUser);
#endif
}
void CWebDiskWnd::OnDblclkTreeTest(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
HTREEITEM hTreeItem = m_pdtcFile->GetSelectedItem();
CString str = m_pdtcFile->GetItemText(hTreeItem);
int i,j;
m_pdtcFile->GetItemImage(hTreeItem, i, j);
if(i == 0)
{
HTREEITEM root1 = m_pdtcFile->GetParentItem(hTreeItem);
HTREEITEM root2;
for(root1 = hTreeItem; root1 != NULL; )
{
root2 = root1;
root1 = m_pdtcFile->GetParentItem(root2);
}
CString str = m_pdtcFile->GetItemText(root2);
if(str.Compare("共享文件夹") == 0)
{
HTREEITEM rootTemp = m_pdtcFile->GetParentItem(hTreeItem);
RetrieveShareFileList(hTreeItem);
}
else
{
RetrieveFileList(hTreeItem);
}
}
*pResult = 0;
}
LRESULT CWebDiskWnd::OnFileDownload(WPARAM wParam, LPARAM lParam)
{
LRESULT lr(0);
HTREEITEM hTreeItem = m_pdtcFile->GetSelectedItem();
CString strFileName;
strFileName = m_pdtcFile->GetItemText(hTreeItem);
CDirDialog dlg;
if (!dlg.DoBrowse())
{
return lr;
}
m_strDestFilePath = dlg.m_strPath;
m_strDestFilePath += (m_strDestFilePath.Right(1) == _T("\\") ? _T("") : _T("\\")) + strFileName;
CString strRootPath, strTemp = _T("");
// m_pdtcFile->DeleteItem(root);
HTREEITEM parent;
parent = hTreeItem;
while(1)
{
strTemp = m_pdtcFile->GetItemText(parent);
strRootPath = _T("\\") + strTemp + strRootPath;
parent = m_pdtcFile->GetParentItem(parent);
if(parent == NULL)
break;
}
BSTR bstrTest = ::SysAllocString(NULL);
BSTR bstrRet = ::SysAllocString(NULL);
bstrTest = strRootPath.AllocSysString();
__int64 nFileSize;
m_pService->GetFileSize(m_bstrTicket, bstrTest, &nFileSize);
g_pDFI.strFileName = strRootPath;
g_pDFI.nFileSize = nFileSize;
g_pDFI.pWnd = this;
::AfxBeginThread(DownloadFile, &g_pDFI);
// DownloadFile(strFilePath, nFileSize, this);
SysFreeString(bstrTest);
SysFreeString(bstrRet);
return lr;
}
UINT DownloadFile(LPVOID p)
{
struct DownloadFileInfo *pVoid = (struct DownloadFileInfo *)p;
CString strFileName;
strFileName.Format(_T("%s"), pVoid->strFileName);
__int64 nFileSize = pVoid->nFileSize;
CWebDiskWnd* pWnd = pVoid->pWnd;
//以每64KB为大小,上传文件
BSTR bstrFileName = ::SysAllocString(NULL);
bstrFileName = strFileName.AllocSysString();
char ch[255];
// strcpy(ch, pWnd->m_strDestFilePath.GetBuffer());
sprintf(ch, "%s", pWnd->m_strDestFilePath);
FILE *fp;
fp = fopen(ch, (const char*)("wb"));
long ChunkSize;
long ChunkCount;
ChunkSize = 1024 * 1024 * 2;
ChunkCount = nFileSize / (ChunkSize);
pWnd->m_pgcTest.SetRange(0, ChunkCount+1);
pWnd->m_pgcTest.SetStep(1);
ATLSOAP_BLOB asbBuffer;
int i=0;
for(i=0; i<ChunkCount; i++)
{
asbBuffer.data = (unsigned char*)malloc(ChunkSize);
asbBuffer.size = ChunkSize;
pWnd->m_pService->DownloadChunk(pWnd->m_bstrTicket, bstrFileName, ChunkSize*i, ChunkSize, &asbBuffer);
fwrite(asbBuffer.data, ChunkSize, 1, fp);
pWnd->m_pgcTest.StepIt();
free(asbBuffer.data);
}
ChunkSize = nFileSize % ChunkSize;
asbBuffer.data = (unsigned char*)malloc(ChunkSize);
asbBuffer.size = ChunkSize;
pWnd->m_pService->DownloadChunk(pWnd->m_bstrTicket, bstrFileName, 1024 * 1024 * 2*i, ChunkSize, &asbBuffer);
fwrite(asbBuffer.data, ChunkSize, 1, fp);
int nLower, nUpper;
pWnd->m_pgcTest.GetRange( nLower, nUpper );
pWnd->m_pgcTest.SetPos(nUpper);
free(asbBuffer.data);
fclose(fp);
SysFreeString(bstrFileName);
Sleep(10);
pWnd->m_pgcTest.SetPos(0);
return 0;
}
LRESULT CWebDiskWnd::OnFileUpload(WPARAM wParam, LPARAM lParam)
{
LRESULT lr(0);
if(m_pService == NULL)
{
::AfxMessageBox("用户没有登陆!");
return lr;
}
HTREEITEM hTreeItem = m_pdtcFile->GetSelectedItem();
int i,j;
m_pdtcFile->GetItemImage(hTreeItem, i, j);
if(i != 0)
{
::AfxMessageBox("请选择一个上传文件夹!");
return lr;
}
if(m_FileList.GetCount() > 1)
{
::AfxMessageBox("请选择一个文件!");
return lr;
}
CString strFileName;
strFileName = m_pdtcFile->GetItemText(hTreeItem);
CString strRootPath, strTemp = _T("");
HTREEITEM parent;
parent = hTreeItem;
while(1)
{
strTemp = m_pdtcFile->GetItemText(parent);
strRootPath = _T("\\") + strTemp + strRootPath;
parent = m_pdtcFile->GetParentItem(parent);
if(parent == NULL)
break;
}
POSITION pos = m_FileList.GetHeadPosition();
CString strFilePath;
m_strDestFilePath = m_FileList.GetNext(pos);
int nBegin;
nBegin = m_strDestFilePath.ReverseFind('\\');
strTemp = m_strDestFilePath.Mid(nBegin+1);
strRootPath += "\\" + strTemp;
g_pUFI.pWnd = this;
g_pUFI.strFilePath = strRootPath;
g_pUFI.TreeInfo = hTreeItem;
::AfxBeginThread(UploadFile, &g_pUFI);
/*
//获取文件名列表中的文件名,并上传每个文件
CString strFilePath;
int i;
for(POSITION pos = m_FileList.GetHeadPosition(); pos != NULL;)
{
strFilePath = m_FileList.GetNext(pos);
g_pUFI.strFilePath = strFilePath;
g_pUFI.pWnd = this;
::AfxBeginThread(UploadFile, &g_pUFI);
}
*/
return lr;
}
UINT UploadFile(LPVOID p)
{
struct UploadFileInfo *pVoid = (struct UploadFileInfo*)p;
CString strFilePath = pVoid->strFilePath;
CWebDiskWnd* pWnd = pVoid->pWnd;
CString strFileName;
//从路径中取得文件名称(如从"c:\abc\123.txt"中取得"123.txt")
/* int nBegin;
nBegin = strFilePath.ReverseFind('\\');
strFileName = strFilePath.Mid(nBegin+1);
*/
BSTR bstrFileName = ::SysAllocString(NULL);
bstrFileName = strFilePath.AllocSysString();
__int64 nCurFileLen;
pWnd->m_pService->CheckUpLoad(pWnd->m_bstrTicket, bstrFileName, &nCurFileLen);
if(nCurFileLen > 0)
{
if(IDNO == ::MessageBox(NULL, "有同名文件,是否续传?", "RTX", MB_YESNO))
{
return 0;
}
}
//打开文件,注意要用“二进制”形式
FILE *fp=NULL;
fp = fopen(pWnd->m_strDestFilePath, "rb");
//取得文件大小
struct _stat buf;
_stat( pWnd->m_strDestFilePath, &buf );
long sizeFile = buf.st_size;
//以每64KB为大小,上传文件
long ChunkSize;
long ChunkCount;
ChunkSize = 1024 * 1024 * 2;
ChunkCount = (buf.st_size - nCurFileLen) / (ChunkSize);
pWnd->m_pgcTest.SetRange(0, ChunkCount+1);
pWnd->m_pgcTest.SetStep(1);
ATLSOAP_BLOB asbBuffer;
int nRet = 1;
fseek(fp, nCurFileLen, SEEK_SET);
int i=0;
for(i=0; i<ChunkCount; i++)
{
asbBuffer.data = (unsigned char*)malloc(ChunkSize);
asbBuffer.size = ChunkSize;
fread(asbBuffer.data, ChunkSize, 1, fp);
pWnd->m_pService->AppendChunk(pWnd->m_bstrTicket, bstrFileName, asbBuffer, nCurFileLen + ChunkSize*i, ChunkSize, sizeFile, &nRet);
if(nRet != 0)
{
::AfxMessageBox("传送失败!");
pWnd->m_pgcTest.SetPos(0);
return 0;
}
pWnd->m_pgcTest.StepIt();
free(asbBuffer.data);
}
ChunkSize = buf.st_size % ChunkSize;
asbBuffer.data = (unsigned char*)malloc(ChunkSize);
asbBuffer.size = ChunkSize;
fread(asbBuffer.data, ChunkSize, 1, fp);
pWnd->m_pService->AppendChunk(pWnd->m_bstrTicket, bstrFileName, asbBuffer, nCurFileLen + 1024 * 1024 * 2 * i, ChunkSize, sizeFile, &nRet);
if(nRet != 0)
{
::AfxMessageBox("传送失败!");
pWnd->m_pgcTest.SetPos(0);
return 0;
}
int nLower, nUpper;
pWnd->m_pgcTest.GetRange( nLower, nUpper );
pWnd->m_pgcTest.SetPos(nUpper);
free(asbBuffer.data);
//释放空间
SysFreeString(bstrFileName);
pWnd->m_pgcTest.SetPos(0);
// SysFreeString(bstrTicket);
pWnd->RetrieveFileList(pVoid->TreeInfo);
return 0;
}
LRESULT CWebDiskWnd::OnFileDelete(WPARAM wParam, LPARAM lParam)
{
LRESULT lr(0);
HTREEITEM hTreeItem = m_pdtcFile->GetSelectedItem();
HTREEITEM hRoot;
hRoot = m_pdtcFile->GetParentItem(hTreeItem);
CString strRootPath, strTemp = _T("");
// m_pdtcFile->DeleteItem(root);
HTREEITEM parent;
parent = hTreeItem;
while(1)
{
strTemp = m_pdtcFile->GetItemText(parent);
strRootPath = _T("\\") + strTemp + strRootPath;
parent = m_pdtcFile->GetParentItem(parent);
if(parent == NULL)
break;
}
BSTR bstrTest = ::SysAllocString(NULL);
BSTR bstrRet = ::SysAllocString(NULL);
bstrTest = strRootPath.AllocSysString();
m_pService->ReMove(m_bstrTicket, bstrTest, &bstrRet);
CString str;
str = _com_util::ConvertBSTRToString(bstrRet);
if(!str.IsEmpty())
{
::AfxMessageBox(_T("Delete Error!"));
}
SysFreeString(bstrTest);
RetrieveFileList(hRoot);
// m_pdtcFile->Expand(hRoot, TVE_COLLAPSE );
m_pdtcFile->Expand(hRoot, TVE_EXPAND);
return lr;
}
void CWebDiskWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
if(m_edPassword.GetSafeHwnd() != NULL)
{
dc.SetBkMode(TRANSPARENT);
dc.SelectObject(&m_ftCtrl);
dc.TextOut(20, 35, _T("用户名"));
dc.TextOut(20, 65, _T("密 码"));
}
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CWnd::OnPaint()
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -