/// <summary> /// 执行下载,并标记状态 /// </summary> /// <param name="localFilePathes"></param> /// <param name="url"></param> /// <param name="state"></param> /// <param name="userName"></param> /// <param name="password"></param> /// <param name="IsOverwrite"></param> /// <param name="throwException"></param> private bool DoDownload(List <string> localFilePathes, string url, FileWritingState state, string userName = "******", string password = "******", bool IsOverwrite = false, bool throwException = false) { // state.IsWriting = true; lock (downLocker) { //内有log记录 if (NetUtil.FtpDownload(url, state.LocalPath, userName, password, IsOverwrite, throwException)) { state.Update(url, true); if (state.IsAvailable()) { localFilePathes.Add(state.LocalPath); return(true); } } } // state.IsWriting = false; return(false); }
/// <summary> /// 尝试下载一个。 /// </summary> /// <param name="userName"></param> /// <param name="password"></param> /// <param name="IsOverwrite"></param> /// <param name="throwException"></param> /// <param name="localFilePathes"></param> /// <param name="url"></param> /// <param name="localPath"></param> private bool TryDownloadOne(List <string> localFilePathes, string url, string localPath, string userName = "******", string password = "******", bool IsOverwrite = false, bool throwException = false) { bool result = false; if (LocaFileWritingManager.Contains(localPath)) { var state = LocaFileWritingManager.Get(localPath); state.WaitWrting(); if (state.IsAvailable()) { log.Info("文件 " + localPath + " 可用"); localFilePathes.Add(localPath); } else { if (!state.IsRegisted(url)) { log.Info(localPath + " 获得新来源 " + url); state.Regist(url); } if (!state.IsWrited(url)) { log.Info("尝试从 " + url + " 下载 " + localPath + ""); result = DoDownload(localFilePathes, url, state, userName, password, IsOverwrite, throwException); } } } else { var state = new FileWritingState(localPath); state.Regist(url); log.Info("第一次下载 " + url + " 到 " + localPath + ""); LocaFileWritingManager.Add(localPath, state); result = DoDownload(localFilePathes, url, state, userName, password, IsOverwrite, throwException); } return(result); }