mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-22 07:14:15 +08:00
style: Change files encoding format to UTF8-BOM
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// FileManager.cpp: implementation of the CFileManager class.
|
||||
// FileManager.cpp: implementation of the CFileManager class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -17,7 +17,7 @@ typedef struct {
|
||||
CFileManager::CFileManager(CClientSocket *pClient, int h, void* user):CManager(pClient)
|
||||
{
|
||||
m_nTransferMode = TRANSFER_MODE_NORMAL;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>, <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
||||
// 发送驱动器列表, 开始进行文件管理,建立新线程
|
||||
SendDriveList();
|
||||
}
|
||||
|
||||
@@ -29,21 +29,21 @@ CFileManager::~CFileManager()
|
||||
VOID CFileManager::OnReceive(PBYTE lpBuffer, ULONG nSize)
|
||||
{
|
||||
switch (lpBuffer[0]) {
|
||||
case COMMAND_LIST_FILES:// <EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><EFBFBD>б<EFBFBD>
|
||||
case COMMAND_LIST_FILES:// 获取文件列表
|
||||
SendFilesList((char *)lpBuffer + 1);
|
||||
break;
|
||||
case COMMAND_DELETE_FILE:// ɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
case COMMAND_DELETE_FILE:// 删除文件
|
||||
DeleteFile((char *)lpBuffer + 1);
|
||||
SendToken(TOKEN_DELETE_FINISH);
|
||||
break;
|
||||
case COMMAND_DELETE_DIRECTORY:// ɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
case COMMAND_DELETE_DIRECTORY:// 删除文件
|
||||
DeleteDirectory((char *)lpBuffer + 1);
|
||||
SendToken(TOKEN_DELETE_FINISH);
|
||||
break;
|
||||
case COMMAND_DOWN_FILES: // <EFBFBD>ϴ<EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
case COMMAND_DOWN_FILES: // 上传文件
|
||||
UploadToRemote(lpBuffer + 1);
|
||||
break;
|
||||
case COMMAND_CONTINUE: // <EFBFBD>ϴ<EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
case COMMAND_CONTINUE: // 上传文件
|
||||
SendFileData(lpBuffer + 1);
|
||||
break;
|
||||
case COMMAND_CREATE_FOLDER:
|
||||
@@ -221,23 +221,23 @@ bool CFileManager::OpenFile(LPCTSTR lpFile, INT nShowCmd)
|
||||
UINT CFileManager::SendDriveList()
|
||||
{
|
||||
char DriveString[256];
|
||||
// ǰһ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>52<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 前一个字节为令牌,后面的52字节为驱动器跟相关属性
|
||||
BYTE DriveList[1024];
|
||||
char FileSystem[MAX_PATH];
|
||||
char *pDrive = NULL;
|
||||
DriveList[0] = TOKEN_DRIVE_LIST; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
DriveList[0] = TOKEN_DRIVE_LIST; // 驱动器列表
|
||||
GetLogicalDriveStrings(sizeof(DriveString), DriveString);
|
||||
pDrive = DriveString;
|
||||
|
||||
unsigned __int64 HDAmount = 0;
|
||||
unsigned __int64 HDFreeSpace = 0;
|
||||
unsigned __int64 AmntMB = 0; // <EFBFBD>ܴ<EFBFBD>С
|
||||
unsigned __int64 FreeMB = 0; // ʣ<EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
||||
unsigned __int64 AmntMB = 0; // 总大小
|
||||
unsigned __int64 FreeMB = 0; // 剩余空间
|
||||
|
||||
DWORD dwOffset = 1;
|
||||
for (; *pDrive != '\0'; pDrive += lstrlen(pDrive) + 1) {
|
||||
memset(FileSystem, 0, sizeof(FileSystem));
|
||||
// <EFBFBD>õ<EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
// 得到文件系统信息及大小
|
||||
GetVolumeInformation(pDrive, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH);
|
||||
SHFILEINFO sfi = {};
|
||||
SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
||||
@@ -245,7 +245,7 @@ UINT CFileManager::SendDriveList()
|
||||
int nTypeNameLen = lstrlen(sfi.szTypeName) + 1;
|
||||
int nFileSystemLen = lstrlen(FileSystem) + 1;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>С
|
||||
// 计算磁盘大小
|
||||
if (pDrive[0] != 'A' && pDrive[0] != 'B' && GetDiskFreeSpaceEx(pDrive, (PULARGE_INTEGER)&HDFreeSpace, (PULARGE_INTEGER)&HDAmount, NULL)) {
|
||||
AmntMB = HDAmount / 1024 / 1024;
|
||||
FreeMB = HDFreeSpace / 1024 / 1024;
|
||||
@@ -253,15 +253,15 @@ UINT CFileManager::SendDriveList()
|
||||
AmntMB = 0;
|
||||
FreeMB = 0;
|
||||
}
|
||||
// <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ֵ
|
||||
// 开始赋值
|
||||
DriveList[dwOffset] = pDrive[0];
|
||||
DriveList[dwOffset + 1] = GetDriveType(pDrive);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>̿ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռȥ<EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>
|
||||
// 磁盘空间描述占去了8字节
|
||||
memcpy(DriveList + dwOffset + 2, &AmntMB, sizeof(unsigned long));
|
||||
memcpy(DriveList + dwOffset + 6, &FreeMB, sizeof(unsigned long));
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 磁盘卷标名及磁盘类型
|
||||
memcpy(DriveList + dwOffset + 10, sfi.szTypeName, nTypeNameLen);
|
||||
memcpy(DriveList + dwOffset + 10 + nTypeNameLen, FileSystem, nFileSystemLen);
|
||||
|
||||
@@ -274,7 +274,7 @@ UINT CFileManager::SendDriveList()
|
||||
|
||||
UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>䷽ʽ
|
||||
// 重置传输方式
|
||||
m_nTransferMode = TRANSFER_MODE_NORMAL;
|
||||
|
||||
UINT nRet = 0;
|
||||
@@ -282,9 +282,9 @@ UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory)
|
||||
char *pszFileName = NULL;
|
||||
LPBYTE lpList = NULL;
|
||||
HANDLE hFile;
|
||||
DWORD dwOffset = 0; // λ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
DWORD dwOffset = 0; // 位移指针
|
||||
int nLen = 0;
|
||||
DWORD nBufferSize = 1024 * 10; // <EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>10K<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWORD nBufferSize = 1024 * 10; // 先分配10K的缓冲区
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
|
||||
lpList = (BYTE *)LocalAlloc(LPTR, nBufferSize);
|
||||
@@ -302,15 +302,15 @@ UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory)
|
||||
|
||||
*lpList = TOKEN_FILE_LIST;
|
||||
|
||||
// 1 Ϊ<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>ֽ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// 1 为数据包头部所占字节,最后赋值
|
||||
dwOffset = 1;
|
||||
/*
|
||||
<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
||||
<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD> strlen(filename) + 1 ('\0')
|
||||
<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С 4
|
||||
文件属性 1
|
||||
文件名 strlen(filename) + 1 ('\0')
|
||||
文件大小 4
|
||||
*/
|
||||
do {
|
||||
// <EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 动态扩展缓冲区
|
||||
if (dwOffset > (nBufferSize - MAX_PATH * 2)) {
|
||||
nBufferSize += MAX_PATH * 2;
|
||||
lpList = (BYTE *)LocalReAlloc(lpList, nBufferSize, LMEM_ZEROINIT|LMEM_MOVEABLE);
|
||||
@@ -320,21 +320,21 @@ UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory)
|
||||
pszFileName = FindFileData.cFileName;
|
||||
if (strcmp(pszFileName, ".") == 0 || strcmp(pszFileName, "..") == 0)
|
||||
continue;
|
||||
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20>ֽ<EFBFBD>
|
||||
// 文件属性 1 字节
|
||||
*(lpList + dwOffset) = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
|
||||
dwOffset++;
|
||||
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD> lstrlen(pszFileName) + 1 <EFBFBD>ֽ<EFBFBD>
|
||||
// 文件名 lstrlen(pszFileName) + 1 字节
|
||||
nLen = lstrlen(pszFileName);
|
||||
memcpy(lpList + dwOffset, pszFileName, nLen);
|
||||
dwOffset += nLen;
|
||||
*(lpList + dwOffset) = 0;
|
||||
dwOffset++;
|
||||
|
||||
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С 8 <20>ֽ<EFBFBD>
|
||||
// 文件大小 8 字节
|
||||
memcpy(lpList + dwOffset, &FindFileData.nFileSizeHigh, sizeof(DWORD));
|
||||
memcpy(lpList + dwOffset + 4, &FindFileData.nFileSizeLow, sizeof(DWORD));
|
||||
dwOffset += 8;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> 8 <20>ֽ<EFBFBD>
|
||||
// 最后访问时间 8 字节
|
||||
memcpy(lpList + dwOffset, &FindFileData.ftLastWriteTime, sizeof(FILETIME));
|
||||
dwOffset += 8;
|
||||
} while(FindNextFile(hFile, &FindFileData));
|
||||
@@ -355,7 +355,7 @@ bool CFileManager::DeleteDirectory(LPCTSTR lpszDirectory)
|
||||
wsprintf(lpszFilter, "%s\\*.*", lpszDirectory);
|
||||
|
||||
HANDLE hFind = FindFirstFile(lpszFilter, &wfd);
|
||||
if (hFind == INVALID_HANDLE_VALUE) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
||||
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
|
||||
return FALSE;
|
||||
|
||||
do {
|
||||
@@ -372,7 +372,7 @@ bool CFileManager::DeleteDirectory(LPCTSTR lpszDirectory)
|
||||
}
|
||||
} while (FindNextFile(hFind, &wfd));
|
||||
|
||||
FindClose(hFind); // <EFBFBD>رղ<EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD>
|
||||
FindClose(hFind); // 关闭查找句柄
|
||||
|
||||
if(!RemoveDirectory(lpszDirectory)) {
|
||||
return FALSE;
|
||||
@@ -385,9 +385,9 @@ UINT CFileManager::SendFileSize(LPCTSTR lpszFileName)
|
||||
UINT nRet = 0;
|
||||
DWORD dwSizeHigh;
|
||||
DWORD dwSizeLow;
|
||||
// 1 <EFBFBD>ֽ<EFBFBD>token, 8<EFBFBD>ֽڴ<EFBFBD>С, <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>, '\0'
|
||||
// 1 字节token, 8字节大小, 文件名称, '\0'
|
||||
HANDLE hFile;
|
||||
// <EFBFBD><EFBFBD><EFBFBD>浱ǰ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 保存当前正在操作的文件名
|
||||
memset(m_strCurrentProcessFileName, 0, sizeof(m_strCurrentProcessFileName));
|
||||
strcpy(m_strCurrentProcessFileName, lpszFileName);
|
||||
|
||||
@@ -396,7 +396,7 @@ UINT CFileManager::SendFileSize(LPCTSTR lpszFileName)
|
||||
return FALSE;
|
||||
dwSizeLow = GetFileSize(hFile, &dwSizeHigh);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 构造数据包,发送文件长度
|
||||
int nPacketSize = lstrlen(lpszFileName) + 10;
|
||||
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
|
||||
if (bPacket==NULL) {
|
||||
@@ -424,7 +424,7 @@ UINT CFileManager::SendFileData(LPBYTE lpBuffer)
|
||||
pFileSize = (FILESIZE *)lpBuffer;
|
||||
lpFileName = m_strCurrentProcessFileName;
|
||||
|
||||
// Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
// 远程跳过,传送下一个
|
||||
if (pFileSize->dwSizeLow == -1) {
|
||||
UploadNext();
|
||||
return 0;
|
||||
@@ -436,14 +436,14 @@ UINT CFileManager::SendFileData(LPBYTE lpBuffer)
|
||||
|
||||
SetFilePointer(hFile, pFileSize->dwSizeLow, (long *)&(pFileSize->dwSizeHigh), FILE_BEGIN);
|
||||
|
||||
int nHeadLength = 9; // 1 + 4 + 4<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
int nHeadLength = 9; // 1 + 4 + 4数据包头部大小
|
||||
DWORD nNumberOfBytesToRead = MAX_SEND_BUFFER - nHeadLength;
|
||||
DWORD nNumberOfBytesRead = 0;
|
||||
|
||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, MAX_SEND_BUFFER);
|
||||
if (lpPacket == NULL)
|
||||
return -1;
|
||||
// Token, <EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Token, 大小,偏移,文件名,数据
|
||||
lpPacket[0] = TOKEN_FILE_DATA;
|
||||
memcpy(lpPacket + 1, pFileSize, sizeof(FILESIZE));
|
||||
ReadFile(hFile, lpPacket + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
|
||||
@@ -461,17 +461,17 @@ UINT CFileManager::SendFileData(LPBYTE lpBuffer)
|
||||
return nRet;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
// 传送下一个文件
|
||||
void CFileManager::UploadNext()
|
||||
{
|
||||
std::list <std::string>::iterator it = m_UploadList.begin();
|
||||
// ɾ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 删除一个任务
|
||||
m_UploadList.erase(it);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 还有上传任务
|
||||
if(m_UploadList.empty()) {
|
||||
SendToken(TOKEN_TRANSFER_FINISH);
|
||||
} else {
|
||||
// <EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
// 上传下一个
|
||||
it = m_UploadList.begin();
|
||||
SendFileSize((*it).c_str());
|
||||
}
|
||||
@@ -495,7 +495,7 @@ bool CFileManager::UploadToRemote(LPBYTE lpBuffer)
|
||||
}
|
||||
|
||||
std::list <std::string>::iterator it = m_UploadList.begin();
|
||||
// <EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
// 发送第一个文件
|
||||
SendFileSize((*it).c_str());
|
||||
|
||||
return true;
|
||||
@@ -516,7 +516,7 @@ bool CFileManager::FixedUploadList(LPCTSTR lpPathName)
|
||||
wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash);
|
||||
|
||||
HANDLE hFind = FindFirstFile(lpszFilter, &wfd);
|
||||
if (hFind == INVALID_HANDLE_VALUE) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
||||
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
|
||||
return false;
|
||||
|
||||
do {
|
||||
@@ -533,7 +533,7 @@ bool CFileManager::FixedUploadList(LPCTSTR lpPathName)
|
||||
}
|
||||
} while (FindNextFile(hFind, &wfd));
|
||||
|
||||
FindClose(hFind); // <EFBFBD>رղ<EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD>
|
||||
FindClose(hFind); // 关闭查找句柄
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -547,14 +547,14 @@ void CFileManager::StopTransfer()
|
||||
void CFileManager::CreateLocalRecvFile(LPBYTE lpBuffer)
|
||||
{
|
||||
FILESIZE *pFileSize = (FILESIZE *)lpBuffer;
|
||||
// <EFBFBD><EFBFBD><EFBFBD>浱ǰ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 保存当前正在操作的文件名
|
||||
memset(m_strCurrentProcessFileName, 0, sizeof(m_strCurrentProcessFileName));
|
||||
strcpy(m_strCurrentProcessFileName, (char *)lpBuffer + 8);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 保存文件长度
|
||||
m_nCurrentProcessFileLength = (pFileSize->dwSizeHigh * (MAXDWORD + long long(1))) + pFileSize->dwSizeLow;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
||||
// 创建多层目录
|
||||
MakeSureDirectoryPathExists(m_strCurrentProcessFileName);
|
||||
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
@@ -592,38 +592,38 @@ void CFileManager::GetFileData()
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
HANDLE hFind = FindFirstFile(m_strCurrentProcessFileName, &FindFileData);
|
||||
|
||||
// 1<EFBFBD>ֽ<EFBFBD>Token,<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƹ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>λ
|
||||
// 1字节Token,四字节偏移高四位,四字节偏移低四位
|
||||
BYTE bToken[9];
|
||||
DWORD dwCreationDisposition = 0; // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||
DWORD dwCreationDisposition = 0; // 文件打开方式
|
||||
memset(bToken, 0, sizeof(bToken));
|
||||
bToken[0] = TOKEN_DATA_CONTINUE;
|
||||
|
||||
// <EFBFBD>ļ<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 文件已经存在
|
||||
if (hFind != INVALID_HANDLE_VALUE) {
|
||||
// <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʲô
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 提示点什么
|
||||
// 如果是续传
|
||||
if (nTransferMode == TRANSFER_MODE_ADDITION) {
|
||||
memcpy(bToken + 1, &FindFileData.nFileSizeHigh, 4);
|
||||
memcpy(bToken + 5, &FindFileData.nFileSizeLow, 4);
|
||||
dwCreationDisposition = OPEN_EXISTING;
|
||||
}
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 覆盖
|
||||
else if (nTransferMode == TRANSFER_MODE_OVERWRITE) {
|
||||
// ƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
// 偏移置0
|
||||
memset(bToken + 1, 0, 8);
|
||||
// <EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 重新创建
|
||||
dwCreationDisposition = CREATE_ALWAYS;
|
||||
}
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
// 传送下一个
|
||||
else if (nTransferMode == TRANSFER_MODE_JUMP) {
|
||||
DWORD dwOffset = -1;
|
||||
memcpy(bToken + 5, &dwOffset, 4);
|
||||
dwCreationDisposition = OPEN_EXISTING;
|
||||
}
|
||||
} else {
|
||||
// ƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
// 偏移置0
|
||||
memset(bToken + 1, 0, 8);
|
||||
// <EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 重新创建
|
||||
dwCreationDisposition = CREATE_ALWAYS;
|
||||
}
|
||||
FindClose(hFind);
|
||||
@@ -639,7 +639,7 @@ void CFileManager::GetFileData()
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
0
|
||||
);
|
||||
// <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 需要错误处理
|
||||
if (hFile == INVALID_HANDLE_VALUE) {
|
||||
m_nCurrentProcessFileLength = 0;
|
||||
return;
|
||||
@@ -651,18 +651,18 @@ void CFileManager::GetFileData()
|
||||
|
||||
void CFileManager::WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 传输完毕
|
||||
BYTE *pData;
|
||||
DWORD dwBytesToWrite;
|
||||
DWORD dwBytesWrite;
|
||||
int nHeadLength = 9; // 1 + 4 + 4 <EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>Ϊ<EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD>9
|
||||
int nHeadLength = 9; // 1 + 4 + 4 数据包头部大小,为固定的9
|
||||
FILESIZE *pFileSize;
|
||||
// <EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
// 得到数据的偏移
|
||||
pData = lpBuffer + 8;
|
||||
|
||||
pFileSize = (FILESIZE *)lpBuffer;
|
||||
|
||||
// <EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>е<EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
// 得到数据在文件中的偏移
|
||||
LONG dwOffsetHigh = pFileSize->dwSizeHigh;
|
||||
LONG dwOffsetLow = pFileSize->dwSizeLow;
|
||||
|
||||
@@ -683,7 +683,7 @@ void CFileManager::WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize)
|
||||
SetFilePointer(hFile, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN);
|
||||
|
||||
int nRet = 0;
|
||||
// д<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
// 写入文件
|
||||
nRet = WriteFile
|
||||
(
|
||||
hFile,
|
||||
@@ -693,7 +693,7 @@ void CFileManager::WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize)
|
||||
NULL
|
||||
);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
// Ϊ<EFBFBD>˱Ƚϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 为了比较,计数器递增
|
||||
BYTE bToken[9];
|
||||
bToken[0] = TOKEN_DATA_CONTINUE;
|
||||
dwOffsetLow += dwBytesWrite;
|
||||
|
||||
Reference in New Issue
Block a user