HistoryQueue.cpp
上传用户:tjfeida
上传日期:2013-03-10
资源大小:1917k
文件大小:4k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // HistoryQueue.cpp: implementation of the CHistoryQueue class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. /*********************************************
  5. **该文件是属于WolfFTP工程中的。如果有什么问题
  6. **请联系
  7. **         tablejiang@21cn.com
  8. **或者访问
  9. **         http://wolfftp.51.net
  10. **以得到最新的支持。
  11. *********************************************/
  12. #include "stdafx.h"
  13. #include "QuickFTP.h"
  14. #include "HistoryQueue.h"
  15. #ifdef _DEBUG
  16. #undef THIS_FILE
  17. static char THIS_FILE[]=__FILE__;
  18. #define new DEBUG_NEW
  19. #endif
  20. //////////////////////////////////////////////////////////////////////
  21. // Construction/Destruction
  22. //////////////////////////////////////////////////////////////////////
  23. CHistoryQueue::CHistoryQueue()
  24. {
  25. m_pHistoryHead = NULL ;
  26. }
  27. CHistoryQueue::~CHistoryQueue()
  28. {
  29. DeleteAllItem( ) ;
  30. }
  31. /****************************************************
  32. ** @Description
  33. ** add a ftp file list to histroy queue.
  34. **
  35. ** @Parameter
  36. **
  37. **
  38. ** @Return:
  39. ** @Author: JHM
  40. ** e-mail: tablejiang@21cn.com
  41. ** @Date: 2001 3 26
  42. ****************************************************/
  43. int CHistoryQueue::AddItem(FTPITEM *pItem, LPSTR szPath)
  44. {
  45. HISTORYINFO* pCreate ;
  46. HISTORYINFO* pCurrent ;
  47. FTPITEM*  pFtpItem ;
  48. //find it in history queue , if find it ,
  49. //replace it item queue, else add item .
  50. pCurrent = FindInHistory( szPath ) ;
  51. if( pCurrent != NULL )
  52. {
  53. pFtpItem = pCurrent->pFtpItem ;
  54. pCurrent->pFtpItem = pItem ;
  55. DeleteFtpItem( pFtpItem ) ;
  56. return 0 ;
  57. }
  58. //create new item .
  59. pCreate = new HISTORYINFO;
  60. pCreate->pFtpItem = pItem ;
  61. strcpy( pCreate->historypath , szPath ) ;
  62. pCreate->pNext = NULL ;
  63. if( m_pHistoryHead == NULL )
  64. {
  65. m_pHistoryHead = pCreate ;
  66. return true ;
  67. }
  68. //find the queue end pos .
  69. pCurrent = m_pHistoryHead ;
  70. while( pCurrent->pNext != NULL )
  71. {
  72. pCurrent = pCurrent->pNext ;
  73. }
  74. pCurrent->pNext = pCreate ;
  75. return true ;
  76. }
  77. /****************************************************
  78. ** @Description
  79. ** find a path in history queue .
  80. **
  81. ** @Parameter
  82. **
  83. **
  84. ** @Return:
  85. ** @Author: JHM
  86. ** e-mail: tablejiang@21cn.com
  87. ** @Date: 2001 3 26
  88. ****************************************************/
  89. HISTORYINFO* CHistoryQueue::FindInHistory(LPSTR szPath)
  90. {
  91. HISTORYINFO* pHead ;
  92. HISTORYINFO* pCur ;
  93. //make path.
  94. char strPath[MAX_PATH] ;
  95. strcpy( strPath , szPath ) ;
  96. int iLength = strlen( szPath ) ;
  97. if( iLength != 1 &&( strPath[ iLength - 1 ] == '\' || strPath[iLength -1] == '/' ))
  98. {
  99. strPath[iLength -1 ] = '' ;
  100. }
  101. if( m_pHistoryHead == NULL )
  102. return NULL ;
  103. pHead = m_pHistoryHead ;
  104. pCur = m_pHistoryHead ;
  105. //find in history list .
  106. while( pCur != NULL )
  107. {
  108. if( strcmp( pCur->historypath , strPath ) == 0 )
  109. return pCur ;
  110. else
  111. pCur = pCur->pNext ;
  112. }
  113. return NULL ;
  114. }
  115. /****************************************************
  116. ** @Description
  117. ** delete a ftp file list .
  118. **
  119. ** @Parameter
  120. **
  121. **
  122. ** @Return:
  123. ** @Author: JHM
  124. ** e-mail: tablejiang@21cn.com
  125. ** @Date: 2001 3 26
  126. ****************************************************/
  127. BOOL CHistoryQueue::DeleteFtpItem(FTPITEM *pFtpItem)
  128. {
  129. FTPITEM * pNextItem = pFtpItem ;
  130. FTPITEM * pCurItem = pFtpItem ;
  131. while( pNextItem != NULL )
  132. {
  133. pCurItem = pNextItem ;
  134. pNextItem = pNextItem->pNext ;
  135. try
  136. {
  137. delete pCurItem ;
  138. }
  139. catch(...)
  140. {
  141. TRACE( "memory delete error!" ) ;
  142. }
  143. pCurItem = NULL ;
  144. }
  145. return true ;
  146. }
  147. /****************************************************
  148. ** @Description
  149. ** delete all ftp file list .
  150. **
  151. ** @Parameter
  152. **
  153. **
  154. ** @Return:
  155. ** @Author: JHM
  156. ** e-mail: tablejiang@21cn.com
  157. ** @Date: 2001 3 26
  158. ****************************************************/
  159. void CHistoryQueue::DeleteAllItem()
  160. {
  161. HISTORYINFO * pNextItem = m_pHistoryHead ;
  162. HISTORYINFO * pCurItem = m_pHistoryHead ;
  163. if( m_pHistoryHead == NULL)
  164. return ;
  165. while( pNextItem != NULL )
  166. {
  167. pCurItem = pNextItem ;
  168. pNextItem = pNextItem->pNext ;
  169. DeleteFtpItem( pCurItem->pFtpItem ) ;
  170. try
  171. {
  172. delete pCurItem ;
  173. }
  174. catch(...)
  175. {
  176. TRACE( "memory delete error!" ) ;
  177. }
  178. pCurItem = NULL ;
  179. }
  180. m_pHistoryHead = NULL ;
  181. return ;
  182. }