/// <summary> /// 下载文件 /// </summary> /// <param name="df">下载文件对象</param> /// <param name="ms">接收下载文件的内存流对象</param> /// <param name="action">进度条委托</param> public void DownLoadFile(DownFile df, MemoryStream ms, Action <int> action) { if (df == null) { throw new Exception("下载文件对象不能为空!"); } try { DownFileResult result = new DownFileResult(); result = fileServiceClient.DownLoadFile(df); if (result.IsSuccess) { if (ms == null) { ms = new MemoryStream(); } int bufferlen = 4096; int count = 0; byte[] buffer = new byte[bufferlen]; if (action != null) { getupdownprogress(result.FileStream, result.FileSize, action);//获取进度条 } while ((count = result.FileStream.Read(buffer, 0, bufferlen)) > 0) { ms.Write(buffer, 0, count); } } else { throw new Exception("下载文件失败!"); } } catch (Exception e) { throw new Exception(e.Message + "\n下载文件失败!"); } finally { //if (fileServiceClient != null) //{ // fileServiceClient.Close(); //} } }
private void Button_Click_1(object sender, RoutedEventArgs e) { string filename = this.filename.Text; string path = System.AppDomain.CurrentDomain.BaseDirectory + @"\client\"; bool issuccess = false; string message = ""; Stream filestream = new MemoryStream(); long filesize = client.DownLoadFile(filename, out issuccess, out message, out filestream); if (issuccess) { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } byte[] buffer = new byte[filesize]; FileStream fs = new FileStream(path + filename, FileMode.Create, FileAccess.Write); int count = 0; while ((count = filestream.Read(buffer, 0, buffer.Length)) > 0) { fs.Write(buffer, 0, count); } //清空缓冲区 fs.Flush(); //关闭流 fs.Close(); MessageBox.Show("下载成功!"); } else { MessageBox.Show(message); } }
private /*async */ void TransferFileFromCmmServer(Part part) { //var result = await _fileServiceClient.DownLoadFileAsync(part.ResultFile); string root = ClientDirsManager.Inst.GetReportDirectory(_cmmName); Task.Run(() => { try { bool success; string message; Stream filestream = new MemoryStream(); long fileSize = _fileServiceClient.DownLoadFile(part.ResultFile, out success, out message, out filestream); if (success) { //目录处理 string filePath = Path.Combine(root, Path.GetFileName(part.ResultFile)); byte[] buffer = new byte[fileSize]; using (var fsm = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { //BinaryWriter bw = new BinaryWriter(fsm); //bw.Write(((MemoryStream)filestream).ToArray()); int count = 0; while ((count = filestream.Read(buffer, 0, buffer.Length)) > 0) { fsm.Write(buffer, 0, count); } fsm.Flush(); } } else { string info = $"工件:{part.Name}_{part.PartNb}_{part.BatchNb} - {message}, 报告文件:{part.ResultFile}"; ClientLogs.Inst.AddLog(new ClientLog(info)); } filestream.Close(); } catch (Exception ex) { // TODO 下载文件出错 //throw; } }); }