/// <summary> /// 下载一个远程文件到指定的文件路径里 /// </summary> /// <param name="davFile">一个WebDavFile的实体</param> /// <param name="localFile">本地的文件地址</param> /// <returns></returns> private DownloadInfo DownloadFile(WebDavFile davFile, string localFile) { DownloadInfo info = new DownloadInfo { FileUrl = davFile.Url }; try { DownloadManager manager = new DownloadManager(GetCredentials()); string remoteFile = davFile.Url; bool result = false; if (File.Exists(localFile)) { FileInfo fm = new FileInfo(localFile); //判断本地文件是否和远程的一样 if (davFile.LastModifyDate == fm.LastWriteTime && davFile.Length == fm.Length) { info.Success = true; result = true; } } if (!info.Success) { string folder = localFile.Substring(0, localFile.LastIndexOf("\\") + 1); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } FileInfo file = new FileInfo(localFile); if (file.Directory != null) { Directory.CreateDirectory(file.Directory.FullName); } //下载文件到指定的地址 result = manager.DownloadFile(davFile, localFile); //更改文件最后修改时间 if (davFile.LastModifyDate != null) { File.SetLastWriteTime(localFile, davFile.LastModifyDate.Value); } info.Success = true; } } catch (Exception ex) { info.Success = false; info.Message = ex.Message; } return(info); }
/// <summary> /// 下载一个远程文件到指定的文件夹里,会根据远程文件的地址创建对应的目录结构 /// </summary> /// <param name="file"></param> /// <param name="defaultFoder"></param> /// <param name="index">当前下载第几个</param> /// <param name="total">总共文件数</param> /// <returns></returns> private DownloadInfo Download(WebDavFile file, string defaultFoder, int index = 1, int total = 1) { string folderPath = CreateFolder(file.Url, defaultFoder); string localFile = folderPath + "\\" + file.DispalyName; file.DownloadPath = localFile; file.DownloadFolderPath = folderPath; //如若DownloadCompling不为空,执行相关的事件 DownloadCompling?.Invoke(file, index, total); //下载文件到本地 DownloadInfo result = DownloadFile(file, localFile); // //DownloadCompleted,执行相关的事件 DownloadCompleted?.Invoke(file, index, total); return(result); }