private void добавитьФайлToolStripMenuItem_Click(object sender, EventArgs e) { AddFileDialog.ShowDialog(); if (AddFileDialog.FileNames.Length == 0) { return; } int index = pathFiles.Length; Array.Resize(ref pathFiles, pathFiles.Length + AddFileDialog.FileNames.Length); foreach (string a in AddFileDialog.FileNames) { ListViewItem item = this.FilesList.Items.Add((this.FilesList.Items.Count + 1).ToString()); item.SubItems.Add(a.Substring(a.LastIndexOf('\\') + 1)); FileInfo fileInfo = new FileInfo(a); item.SubItems.Add((fileInfo.Length / 1000000.0).ToString() + " МБ"); item.SubItems.Add("Готов к отправке"); pathFiles[index++] = a; LogApplication.WriteLog("[SendFileForm] В список к отправке добавлен файл " + a); } }
/// <summary> /// 文件拖入且松开 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void File_Drop(object sender, System.Windows.DragEventArgs e) { if (e.Data.GetDataPresent(System.Windows.DataFormats.FileDrop)) { string[] files = (string[])e.Data.GetData(System.Windows.DataFormats.FileDrop); if (files.Length < 1) { return; } AddFileDialog addFileDialog = new AddFileDialog(files[0]); addFileDialog.ShowDialog(); } }
private void передатьФайлToolStripMenuItem_Click(object sender, EventArgs e) { LogApplication.WriteLog("\n\n[Передача файла EVENT] Открытие диалога выбора файла"); this.TransferFile_Progress.Value = 0; Label_State.Text = "Выбор файла"; GlavnForm.Invoke((MethodInvoker) delegate { AddFileDialog.ShowDialog(); }); LogApplication.WriteLog("[Передача файла EVENT] Проверка количества выбранных файлов"); if (AddFileDialog.FileNames.Length == 0) { LogApplication.WriteLog("[Передача файла EVENT] Файлы не были выбранны"); return; } LogApplication.WriteLog("[Передача файла EVENT] Создание item'a в таблице"); ListViewItem item = this.FilesList.Items.Add((this.FilesList.Items.Count + 1).ToString()); item.SubItems.Add(AddFileDialog.FileNames[0].Substring(AddFileDialog.FileNames[0].LastIndexOf('\\') + 1)); FileInfo fileInfo = new FileInfo(AddFileDialog.FileNames[0]); item.SubItems.Add((fileInfo.Length / 1000000f).ToString() + " МБ"); item.SubItems.Add("Отправляется"); LogApplication.WriteLog("[Передача файла EVENT] ApplicationDoEvents"); Application.DoEvents(); client = new UdpClient(); string buffer = "1" + AddFileDialog.FileNames[0].Substring(AddFileDialog.FileNames[0].LastIndexOf('\\') + 1, AddFileDialog.FileNames[0].Length - AddFileDialog.FileNames[0].LastIndexOf('\\') - 1); LogApplication.WriteLog($"[Передача файла EVENT] Передача клиенту названия файла {buffer}"); { Label_State.Text = "Передача названия файла"; client.Send(Config.Encoder.GetBytes(buffer), Config.Encoder.GetBytes(buffer).Length, RemoteIp.ToString(), Config.UDP_FILE_NAME_RECEIVE); } LogApplication.WriteLog($"[Передача файла EVENT] Передача клиенту размера файла"); { buffer = $"4{fileInfo.Length / 1000000f}"; client.Send(Config.Encoder.GetBytes(buffer), Config.Encoder.GetBytes(buffer).Length, RemoteIp.ToString(), Config.UDP_FILE_NAME_RECEIVE); } new Task(() => { LogApplication.WriteLog("[Передача файла EVENT] Передано, начинаю передачу по TCP -> " + AddFileDialog.FileNames[0] + "\n\n\n"); BinaryReader reader = new BinaryReader(new FileStream(AddFileDialog.FileNames[0], FileMode.Open)); this.TransferFile_Progress.Maximum = (int)reader.BaseStream.Length; long sendedBytes = 0; Label_State.Text = "Передача файла"; while (reader.BaseStream.Position < reader.BaseStream.Length) { try { byte[] ReadBytes = reader.ReadBytes(1024); tcpClient.GetStream().Write(ReadBytes, 0, ReadBytes.Length); sendedBytes += ReadBytes.Length; this.TransferFile_Progress.Value += ReadBytes.Length; LogApplication.WriteLog($"SEND bytes {ReadBytes.Length.ToString()}/{sendedBytes}"); LogApplication.WriteLog($"Stream position {reader.BaseStream.Position}/{reader.BaseStream.Length}\n"); } catch (Exception Ex) { LogApplication.WriteLog("[SendBytes] exception \n" + Ex.Message); } GlavnForm.Invoke((MethodInvoker) delegate { Label_State.Text = $"Идёт передача {reader.BaseStream.Position / (float)reader.BaseStream.Length * 100} из 100%"; }); } Thread.Sleep(300); LogApplication.WriteLog("[Передача файла EVENT] Типа передано, отправляю сигнал о закрытии потока"); client.Send(Config.Encoder.GetBytes("00zdkf"), Config.Encoder.GetBytes("00zdkf").Length, RemoteIp.ToString(), Config.UDP_FILE_NAME_RECEIVE); LogApplication.WriteLog("[Передача файла EVENT] Конец"); GlavnForm.Invoke((MethodInvoker) delegate { item.SubItems[3].Text = "Передано"; new PopupNotifier() { TitleText = "FileExchange", ContentText = $"Файл {item.SubItems[1].Text} успешно передан" }.Popup(); }); reader.Close(); }).Start(); }