@@ -128,7 +128,14 @@ BOOL CSession_UPStroage::Session_UPStroage_Insert(LPCTSTR lpszClientAddr, LPCTST
128128 _tcscpy (st_Client.st_StorageInfo .tszFileDir , lpszFileDir);
129129 _tcscpy (st_Client.st_StorageInfo .tszClientAddr , lpszClientAddr);
130130 // 填充下载信息
131- st_Client.st_StorageInfo .pSt_File = _tfopen (lpszFileDir, _T (" ab+" ));
131+ if (m_bResume)
132+ {
133+ st_Client.st_StorageInfo .pSt_File = _tfopen (lpszFileDir, _T (" ab+" ));
134+ }
135+ else
136+ {
137+ st_Client.st_StorageInfo .pSt_File = _tfopen (lpszFileDir, _T (" wb" ));
138+ }
132139 if (NULL == st_Client.st_StorageInfo .pSt_File )
133140 {
134141 Session_IsErrorOccur = TRUE ;
@@ -145,61 +152,6 @@ BOOL CSession_UPStroage::Session_UPStroage_Insert(LPCTSTR lpszClientAddr, LPCTST
145152 return TRUE ;
146153}
147154/* *******************************************************************
148- 函数名称:Session_UPStroage_GetComplete
149- 函数功能:接受的数据是否完毕
150- 参数.一:lpszClientAddr
151- In/Out:In
152- 类型:常量字符指针
153- 可空:N
154- 意思:输入要操作的客户端
155- 参数.二:pbUPComplete
156- In/Out:Out
157- 类型:逻辑型指针
158- 可空:N
159- 意思:上传是否完成
160- 参数.三:pbFileComplete
161- In/Out:Out
162- 类型:逻辑型指针
163- 可空:N
164- 意思:文件是否完成,某些断点续传的文件可能需要此参数
165- 返回值
166- 类型:逻辑型
167- 意思:是否成功
168- 备注:
169- *********************************************************************/
170- BOOL CSession_UPStroage::Session_UPStroage_GetComplete (LPCTSTR lpszClientAddr, BOOL* pbUPComplete, BOOL* pbFileComplete)
171- {
172- Session_IsErrorOccur = FALSE ;
173-
174- if ((NULL == lpszClientAddr) || (NULL == pbUPComplete))
175- {
176- Session_IsErrorOccur = TRUE ;
177- Session_dwErrorCode = ERROR_STORAGE_MODULE_SESSION_PARAMENT;
178- return FALSE ;
179- }
180-
181- st_Locker.lock_shared ();
182- unordered_map<tstring, SESSION_STORAGEUPLOADER>::iterator stl_MapIterator = stl_MapStroage.find (lpszClientAddr);
183- if (stl_MapIterator == stl_MapStroage.end ())
184- {
185- Session_IsErrorOccur = TRUE ;
186- Session_dwErrorCode = ERROR_STORAGE_MODULE_SESSION_NOTFOUND;
187- st_Locker.unlock_shared ();
188- return FALSE ;
189- }
190- if (stl_MapIterator->second .st_StorageInfo .ullRWLen >= stl_MapIterator->second .st_StorageInfo .ullRWCount )
191- {
192- *pbUPComplete = TRUE ;
193- }
194- else
195- {
196- *pbUPComplete = FALSE ;
197- }
198-
199- st_Locker.unlock_shared ();
200- return TRUE ;
201- }
202- /* *******************************************************************
203155函数名称:Session_UPStroage_GetInfo
204156函数功能:获取上传客户端信息
205157 参数.一:lpszClientAddr
@@ -405,18 +357,57 @@ BOOL CSession_UPStroage::Session_UPStroage_Delete(LPCTSTR lpszClientAddr)
405357 unordered_map<tstring, SESSION_STORAGEUPLOADER>::iterator stl_MapIterator = stl_MapStroage.find (lpszClientAddr);
406358 if (stl_MapIterator != stl_MapStroage.end ())
407359 {
408- 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);
360+ if (NULL != stl_MapIterator->second .st_StorageInfo .pSt_File )
361+ {
362+ fclose (stl_MapIterator->second .st_StorageInfo .pSt_File );
363+ }
364+ if (0 == stl_MapIterator->second .st_StorageInfo .ullFSize )
365+ {
366+ struct __stat64 st_FStat;
367+ memset (&st_FStat, ' \0 ' , sizeof (struct __stat64 ));
368+ _stat64 (stl_MapIterator->second .st_StorageInfo .tszFileDir , &st_FStat);
369+ stl_MapIterator->second .st_StorageInfo .ullFSize = st_FStat.st_size ;
370+ }
413371 // 大小是否足够
414- if ((stl_MapIterator->second .st_StorageInfo .ullCount != st_FStat. st_size ) && !m_bResume)
372+ if ((stl_MapIterator->second .st_StorageInfo .ullCount != stl_MapIterator-> second . st_StorageInfo . ullFSize ) && !m_bResume)
415373 {
416374 _tremove (stl_MapIterator->second .st_StorageInfo .tszFileDir );
417375 }
418376 stl_MapStroage.erase (stl_MapIterator);
419377 }
420378 st_Locker.unlock ();
421379 return TRUE ;
380+ }
381+ /* *******************************************************************
382+ 函数名称:Session_UPStroage_Close
383+ 函数功能:关闭读写文件句柄
384+ 参数.一:lpszClientAddr
385+ In/Out:In
386+ 类型:常量字符指针
387+ 可空:N
388+ 意思:要关闭的客户端会话
389+ 返回值
390+ 类型:逻辑型
391+ 意思:是否成功
392+ 备注:
393+ *********************************************************************/
394+ BOOL CSession_UPStroage::Session_UPStroage_Close (LPCTSTR lpszClientAddr)
395+ {
396+ Session_IsErrorOccur = FALSE ;
397+
398+ st_Locker.lock ();
399+ unordered_map<tstring, SESSION_STORAGEUPLOADER>::iterator stl_MapIterator = stl_MapStroage.find (lpszClientAddr);
400+ if (stl_MapIterator != stl_MapStroage.end ())
401+ {
402+ if (NULL != stl_MapIterator->second .st_StorageInfo .pSt_File )
403+ {
404+ fclose (stl_MapIterator->second .st_StorageInfo .pSt_File );
405+ }
406+ struct __stat64 st_FStat;
407+ memset (&st_FStat, ' \0 ' , sizeof (struct __stat64 ));
408+ _stat64 (stl_MapIterator->second .st_StorageInfo .tszFileDir , &st_FStat);
409+ stl_MapIterator->second .st_StorageInfo .ullFSize = st_FStat.st_size ;
410+ }
411+ st_Locker.unlock ();
412+ return TRUE ;
422413}
0 commit comments