public override void ProcessRequest() { MoveContentsReq req = mSocketTalker.ReceiveObject <MoveContentsReq>(); MoveContentsRes res = new MoveContentsRes(); try { Content containerContent = new Content(req.Container); switch (containerContent.Type) { case Content.TYPE_NOT_FOUND: throw new KnownException("找不到路径 " + containerContent.Path + " 所代表的容器。"); case Content.TYPE_FILE: throw new KnownException("路径 " + containerContent.Path + " 代表的是一个文件,不能作为容器。"); } res.MoveResults = new string[req.ContentPaths.Count]; for (int i = 0; i < req.ContentPaths.Count; i++) { Content content = new Content(req.ContentPaths[i]); try { switch (content.Type) { case Content.TYPE_NOT_FOUND: throw new KnownException("找不到此路径所代表的内容。"); case Content.TYPE_DRIVER: throw new KnownException("此路径所代表的是一个驱动器,不能被移动。"); case Content.TYPE_FILE: if (IsInTheSameDriver(content.Path, containerContent.Path) == false) { throw new KnownException("无法在不同的驱动器之间移动文件,可以先复制后删除。"); } string movedFilePath = GetMovedFilePath(content.Path, containerContent.Path); if (new Content(movedFilePath).Type != Content.TYPE_NOT_FOUND) { throw new KnownException("容器中已经存在同名文件或目录,不能移动到此容器中。"); } File.Move(content.Path, movedFilePath); break; case Content.TYPE_DIRECTORY: if (IsInTheSameDriver(content.Path, containerContent.Path) == false) { throw new KnownException("无法在不同的驱动器之间移动目录,可以先复制后删除。"); } string movedDirectoryPath = GetMovedDirectoryPath(content.Path, containerContent.Path); if (new Content(movedDirectoryPath).Type != Content.TYPE_NOT_FOUND) { throw new KnownException("容器中已经存在同名文件或目录,不能移动到此容器中。"); } Directory.Move(content.Path, movedDirectoryPath); break; } } catch (Exception e) { res.MoveResults[i] = content.Path + " " + e.Message; } } mSocketTalker.SendInt(ProtocolTypes.TYPE_MOVE_CONTENTS); mSocketTalker.SendObject(res); } catch (Exception e) { res.ErorrOccured = true; res.ErrorMessage = e.Message; mSocketTalker.SendInt(ProtocolTypes.TYPE_MOVE_CONTENTS); mSocketTalker.SendObject(res); } }
private void OnOutputReceived(object sender, OnResponseReceivedArgs e) { switch (e.ResponseType) { case ProtocolTypes.TYPE_LIST_CONTENTS: { ListContentsRes res = e.GetResponse <ListContentsRes>(); if (res.ErorrOccured) { mErrorLable.Text = res.ErrorMessage; mErrorLable.Show(); mContentList.Items.Clear(); } else { mErrorLable.Text = ""; mErrorLable.Hide(); mContentList.Items.Clear(); if (res.Drivers != null && res.Drivers.Length > 0) { foreach (string driver in res.Drivers) { ListViewItem item = new ListViewItem(); item.ImageKey = "driver.png"; item.Text = driver; mContentList.Items.Add(item); } } if (res.Directories != null && res.Directories.Length > 0) { foreach (string directory in res.Directories) { ListViewItem item = new ListViewItem(); item.ImageKey = "folder.png"; item.Text = Path.GetFileName(directory); mContentList.Items.Add(item); } } if (res.Files != null && res.Files.Length > 0) { foreach (string file in res.Files) { ListViewItem item = new ListViewItem(); item.ImageKey = "file.png"; item.Text = Path.GetFileName(file); mContentList.Items.Add(item); } } } mGoToOrRefreshButton.Text = "刷新"; } break; case ProtocolTypes.TYPE_RENAME_CONTENT: { RenameContentRes res = e.GetResponse <RenameContentRes>(); if (res.ErorrOccured) { MessageBox.Show(res.ErrorMessage, "重命名失败"); } SendListContentsReq(); } break; case ProtocolTypes.TYPE_DELETE_CONTENTS: { DeleteContentsRes res = e.GetResponse <DeleteContentsRes>(); if (res.ErorrOccured) { StringBuilder builder = new StringBuilder(); foreach (string result in res.DeleteResults) { if (result != null) { builder.AppendLine(result); } } MessageBox.Show(builder.ToString(), "删除出现错误"); } SendListContentsReq(); } break; case ProtocolTypes.TYPE_CREATE_DIRECTORY: { CreateDirectoryRes res = e.GetResponse <CreateDirectoryRes>(); if (res.ErorrOccured) { MessageBox.Show(res.ErrorMessage, "新建文件夹失败"); } SendListContentsReq(); } break; case ProtocolTypes.TYPE_START_PROCESS: { StartProcessRes res = e.GetResponse <StartProcessRes>(); if (res.ErorrOccured) { MessageBox.Show(res.ErrorMessage, "打开进程失败"); } } break; case ProtocolTypes.TYPE_GET_CONTENT_INFO: { GetContentInfoRes res = e.GetResponse <GetContentInfoRes>(); if (res.ErorrOccured) { MessageBox.Show(res.ErrorMessage, "获取属性失败"); } else { StringBuilder builder = new StringBuilder(); foreach (TextInfo result in res.InfoList) { builder.AppendLine(result.Name + " : " + result.Value); } MessageBox.Show(builder.ToString(), "数学"); } } break; case ProtocolTypes.TYPE_MOVE_CONTENTS: { MoveContentsRes res = e.GetResponse <MoveContentsRes>(); if (res.ErorrOccured) { MessageBox.Show(res.ErrorMessage, "移动出现错误"); } else { StringBuilder builder = new StringBuilder(); foreach (string result in res.MoveResults) { if (result != null) { builder.AppendLine(result); } } if (builder.Length > 0) { MessageBox.Show(builder.ToString(), "移动出现错误"); } } SendListContentsReq(); } break; case ProtocolTypes.TYPE_COPY_CONTENTS: { CopyContentsRes res = e.GetResponse <CopyContentsRes>(); if (res.ErorrOccured) { MessageBox.Show(res.ErrorMessage, "复制出现错误"); } else { StringBuilder builder = new StringBuilder(); foreach (string result in res.CopyResults) { if (result != null) { builder.AppendLine(result); } } if (builder.Length > 0) { MessageBox.Show(builder.ToString(), "复制出现错误"); } } SendListContentsReq(); } break; } }