@@ -23,15 +23,21 @@ CSession_UPStroage::~CSession_UPStroage()
2323/* *******************************************************************
2424函数名称:Session_UPStroage_Init
2525函数功能:初始化上传会话管理器
26+ 参数.一:bUPResume
27+ In/Out:In
28+ 类型:逻辑型
29+ 可空:Y
30+ 意思:是否启用断点上传
2631返回值
2732 类型:逻辑型
2833 意思:是否成功
2934备注:
3035*********************************************************************/
31- BOOL CSession_UPStroage::Session_UPStroage_Init ()
36+ BOOL CSession_UPStroage::Session_UPStroage_Init (BOOL bUPResume )
3237{
3338 Session_IsErrorOccur = FALSE ;
3439
40+ m_bResume = bUPResume;
3541 return TRUE ;
3642}
3743/* *******************************************************************
@@ -122,7 +128,7 @@ BOOL CSession_UPStroage::Session_UPStroage_Insert(LPCTSTR lpszClientAddr, LPCTST
122128 _tcscpy (st_Client.st_StorageInfo .tszFileDir , lpszFileDir);
123129 _tcscpy (st_Client.st_StorageInfo .tszClientAddr , lpszClientAddr);
124130 // 填充下载信息
125- st_Client.st_StorageInfo .pSt_File = _tfopen (lpszFileDir, _T (" wb " ));
131+ st_Client.st_StorageInfo .pSt_File = _tfopen (lpszFileDir, _T (" ab+ " ));
126132 if (NULL == st_Client.st_StorageInfo .pSt_File )
127133 {
128134 Session_IsErrorOccur = TRUE ;
@@ -146,21 +152,26 @@ BOOL CSession_UPStroage::Session_UPStroage_Insert(LPCTSTR lpszClientAddr, LPCTST
146152 类型:常量字符指针
147153 可空:N
148154 意思:输入要操作的客户端
149- 参数.二:pbComplete
155+ 参数.二:pbUPComplete
156+ In/Out:Out
157+ 类型:逻辑型指针
158+ 可空:N
159+ 意思:上传是否完成
160+ 参数.三:pbFileComplete
150161 In/Out:Out
151162 类型:逻辑型指针
152163 可空:N
153- 意思:输出是否完成
164+ 意思:文件是否完成,某些断点续传的文件可能需要此参数
154165返回值
155166 类型:逻辑型
156167 意思:是否成功
157168备注:
158169*********************************************************************/
159- BOOL CSession_UPStroage::Session_UPStroage_GetComplete (LPCTSTR lpszClientAddr, BOOL* pbComplete )
170+ BOOL CSession_UPStroage::Session_UPStroage_GetComplete (LPCTSTR lpszClientAddr, BOOL* pbUPComplete, BOOL* pbFileComplete )
160171{
161172 Session_IsErrorOccur = FALSE ;
162173
163- if ((NULL == lpszClientAddr) || (NULL == pbComplete ))
174+ if ((NULL == lpszClientAddr) || (NULL == pbUPComplete ))
164175 {
165176 Session_IsErrorOccur = TRUE ;
166177 Session_dwErrorCode = ERROR_STORAGE_MODULE_SESSION_PARAMENT;
@@ -178,12 +189,13 @@ BOOL CSession_UPStroage::Session_UPStroage_GetComplete(LPCTSTR lpszClientAddr, B
178189 }
179190 if (stl_MapIterator->second .st_StorageInfo .ullRWLen >= stl_MapIterator->second .st_StorageInfo .ullRWCount )
180191 {
181- *pbComplete = TRUE ;
192+ *pbUPComplete = TRUE ;
182193 }
183194 else
184195 {
185- *pbComplete = FALSE ;
196+ *pbUPComplete = FALSE ;
186197 }
198+
187199 st_Locker.unlock_shared ();
188200 return TRUE ;
189201}
@@ -394,6 +406,15 @@ BOOL CSession_UPStroage::Session_UPStroage_Delete(LPCTSTR lpszClientAddr)
394406 if (stl_MapIterator != stl_MapStroage.end ())
395407 {
396408 fclose (stl_MapIterator->second .st_StorageInfo .pSt_File );
409+
410+ struct __stat64 st_FStat;
411+ memset (&st_FStat, ' \0 ' , sizeof (struct __stat64 ));
412+ _stat64 (stl_MapIterator->second .st_StorageInfo .tszFileDir , &st_FStat);
413+ // 大小是否足够
414+ if ((stl_MapIterator->second .st_StorageInfo .ullCount != st_FStat.st_size ) && !m_bResume)
415+ {
416+ _tremove (stl_MapIterator->second .st_StorageInfo .tszFileDir );
417+ }
397418 stl_MapStroage.erase (stl_MapIterator);
398419 }
399420 st_Locker.unlock ();
0 commit comments