private List<TransferNamespace.Transfer> RecurseFolder(string root, string folderName)
 {
     List<TransferNamespace.Transfer> result = new List<TransferNamespace.Transfer>();
     DirectoryInfo info = new DirectoryInfo(root + folderName);
     foreach (FileInfo file in info.GetFiles())
     {
         TransferNamespace.Transfer transfer = new TransferNamespace.Transfer();
         transfer.Catalog = folderName.Substring(1);
         transfer.Id = Guid.NewGuid().ToString() + Guid.NewGuid().ToString();
         transfer.Length = file.Length;
         transfer.Name = file.Name;
         transfer.FullPath = file.FullName;
         result.Add(transfer);
     }
     foreach (DirectoryInfo dir in info.GetDirectories())
     {
         result.AddRange(RecurseFolder(root, folderName + @"\" + dir.Name));
     }
     return result;
 }
 private void button1_Click(object sender, EventArgs e)
 {
     if (dataGridView1.Rows.Count > 0 && IsValidIP(textBox1.Text) && textBox2.Text.Length > 0)
     {
         TransferNamespace.FilesTransfer transfer = new TransferNamespace.FilesTransfer() { Action = FileTransferring.TransferNamespace.Action.Invite };
         transfer.Files = new List<TransferNamespace.Transfer>();
         foreach (DataRow i in files.Rows)
         {
             if (((EDataType)i["Type"]) == EDataType.Folder)
             {
                 if (!Directory.Exists((string)i["Path"])) continue;
                 DirectoryInfo dir = new DirectoryInfo((string)i["Path"]);
                 string root = dir.Parent.FullName;
                 string name = dir.Name;
                 transfer.Files.AddRange(RecurseFolder(root, @"\" + name));
             }
             else
             {
                 if (!File.Exists((string)i["Path"])) continue;
                 FileInfo file = new FileInfo((string)i["Path"]);
                 TransferNamespace.Transfer t = new TransferNamespace.Transfer();
                 t.Catalog = "<root>";
                 t.Id = Guid.NewGuid().ToString() + Guid.NewGuid().ToString();
                 t.Name = file.Name;
                 t.FullPath = file.FullName;
                 t.Length = file.Length;
                 transfer.Files.Add(t);
             }
         }
         transfer.Name = textBox2.Text;
         TransferNamespace.TransferClient client = new FileTransferring.TransferNamespace.TransferClient(HelpClass.ConfigureEndpoint(), new EndpointAddress("net.tcp://" + textBox1.Text + ":7634/ClientTransferring/tcp"));
         try
         {
             client.Open();
         }
         catch { MessageBox.Show("Can not connect to the remote address!"); }
         FileProgressForm progress = new FileProgressForm(client,0);
         progress.BeginSend(transfer);
         try
         {
             progress.Show(this);
         }
         catch { }
     }
 }