private void UpFileEx(string cudir, string name) { FileInfo file = new FileInfo(name); if (file.Exists) { FileStream stream = new FileStream(name, FileMode.Open, FileAccess.Read); Re: long key = DateTime.Now.Ticks; if (UpFileList.ContainsKey(key)) { System.Threading.Thread.Sleep(1); goto Re; } UpFileList.Add(key, stream); string upfilename = System.IO.Path.Combine(cudir, file.Name); UpFile upfile = new UpFile() { FullName = upfilename, Size = stream.Length, UpKey = key, }; SocketManager.Send(BufferFormatV2.FormatFCA(upfile, Deflate.Compress)); } else { DirectoryInfo dir = new DirectoryInfo(name); if (dir.Exists) { string fullname = System.IO.Path.Combine(cudir, dir.Name); PackHandler.NewDir ndir = new PackHandler.NewDir() { DirName = fullname }; SocketManager.Send(BufferFormatV2.FormatFCA(ndir, Deflate.Compress)); foreach (var item in dir.GetFileSystemInfos()) { UpFileEx(fullname, item.FullName); } } } }
private void _Up_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { string filename = openFileDialog1.FileName; FileInfo file = new FileInfo(filename); if (file.Exists) { FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read); Re: long key = DateTime.Now.Ticks; if (UpFileList.ContainsKey(key)) { System.Threading.Thread.Sleep(1); goto Re; } UpFileList.Add(key, stream); string upfilename = System.IO.Path.Combine(CurrentDir, file.Name); UpFile upfile = new UpFile() { FullName = upfilename, Size = stream.Length, UpKey = key, }; SocketManager.Send(BufferFormatV2.FormatFCA(upfile, Deflate.Compress)); } } }
void SocketManager_BinaryInput(byte[] data) { ReadBytesV2 read = new ReadBytesV2(data, Deflate.Decompress); int lengt; int cmd; if (read.ReadInt32(out lengt) && lengt == read.Length && read.ReadInt32(out cmd)) { PackType cmdtype = (PackType)cmd; switch (cmdtype) { case PackType.GetDisk: case PackType.Dir: { Dir dir; if (read.ReadObject <Dir>(out dir)) { this.BeginInvoke(new EventHandler((a, b) => { if (dir.IsSuccess) { this.button1.Enabled = true; this.button1.Text = "上层目录"; this.listView1.Clear(); dir.FileSystemList.Sort(new Comparison <FileSystem>((a1, a2) => { if (a1.FileType == FileType.Dir && a2.FileType == FileType.Dir) { return(a1.Name.CompareTo(a2.Name)); } else if (a1.FileType != FileType.Dir && a2.FileType != FileType.Dir) { return(a1.Name.CompareTo(a2.Name)); } else if (a1.FileType == FileType.Dir && a2.FileType == FileType.File) { return(-1); } else if (a2.FileType == FileType.Dir && a1.FileType == FileType.File) { return(1); } else { return(0); } })); SystemICO.ListViewSysImages(this.listView1); int x1 = 0, x2 = 0; foreach (FileSystem p in dir.FileSystemList) { if (p.FileType == FileType.File) { this.listView1.Items.Add(new ListViewItem() { Text = p.Name, ImageIndex = GetImageIndex(p.Name), Tag = p }); x1++; } else { this.listView1.Items.Add(new ListViewItem() { Text = p.Name, ImageIndex = 1, Tag = p }); x2++; } } if (!string.IsNullOrEmpty(Path)) { string apath = dir.DirName; apath = apath.Remove(0, Path.Length); if (string.IsNullOrEmpty(apath)) { apath = "\\"; } this.textBox1.Text = apath; } else { this.textBox1.Text = dir.DirName; } CurrentDir = dir.DirName; this.label2.Text = "共找到目录:" + x2 + "个,文件:" + x1 + "个"; } else { MessageBox.Show(dir.Msg); } })); } } break; case PackType.DelFile: { DelFile dfile; if (read.ReadObject <DelFile>(out dfile)) { this.BeginInvoke(new EventHandler((a, b) => { string isErr = ""; foreach (DelFileName p in dfile.DelFileList) { if (!p.IsSuccess) { isErr += p.Msg + "\r\n"; } } if (isErr == "") { MessageBox.Show("删除成功"); } else { MessageBox.Show(isErr); } GotoDir(); })); } } break; case PackType.NewDir: { PackHandler.NewDir ndir; if (read.ReadObject <PackHandler.NewDir>(out ndir)) { this.BeginInvoke(new EventHandler((a, b) => { if (ndir.IsSuccess) { GotoDir(); } else { MessageBox.Show(ndir.Msg); GotoDir(); } })); } } break; case PackType.MoveFileSystem: { PackHandler.MoveFileSystem mfs; if (read.ReadObject <PackHandler.MoveFileSystem>(out mfs)) { this.BeginInvoke(new EventHandler((a, b) => { if (!mfs.IsSuccess) { MessageBox.Show(mfs.Msg); GotoDir(); } if (this.MoveFile != null) { if (mfs.OldName == MoveFile.FullName) { GotoDir(); this.MoveFile = null; } } })); } } break; case PackType.Run: { Run run; if (read.ReadObject <Run>(out run)) { this.BeginInvoke(new EventHandler((a, b) => { if (run.IsSuccess) { MessageBox.Show("运行成功"); } else { MessageBox.Show(run.Msg); } })); } } break; case PackType.Down: { Down down; if (read.ReadObject <Down>(out down)) { this.BeginInvoke(new EventHandler((a, b) => { if (down.IsSuccess) { DownFile downwin = new DownFile(down); downwin.Show(); } else { MessageBox.Show(down.Msg); } })); } } break; case PackType.UpFile: { UpFile upFile; if (read.ReadObject <UpFile>(out upFile)) { if (!upFile.IsSuccess) { this.BeginInvoke(new EventHandler((a, b) => { MessageBox.Show("上传文件发生错误:" + upFile.Msg); })); } else { if (UpFileList.ContainsKey(upFile.UpKey)) { this.BeginInvoke(new EventHandler((a, b) => { FileStream stream = UpFileList[upFile.UpKey]; UpFiles win = new UpFiles(this, upFile.FullName, upFile.UpKey, stream); win.Show(); })); } else { this.BeginInvoke(new EventHandler((a, b) => { MessageBox.Show("上传文件发生错误:无法找到KEY所指定的文件"); })); } } } } break; case PackType.UpClose: { long key; if (read.ReadInt64(out key)) { if (UpFileList.ContainsKey(key)) { this.UpFileList[key].Close(); this.UpFileList.Remove(key); this.BeginInvoke(new EventHandler((a, b) => { if (UpFileClose != null) { UpFileClose(key); } })); } } } break; case PackType.ReBytes: { long downkey; if (read.ReadInt64(out downkey)) { long startpostion; int size; if (read.ReadInt64(out startpostion) && read.ReadInt32(out size)) { if (this.UpFileList.ContainsKey(downkey)) { FileStream strem = UpFileList[downkey]; strem.Position = startpostion; byte[] xdata = new byte[size]; strem.Read(xdata, 0, xdata.Length); BufferFormatV2 buff = new BufferFormatV2((int)PackType.DataSet); buff.AddItem(downkey); buff.AddItem(startpostion); buff.AddItem(xdata); SocketManager.Send(buff.Finish()); } else { BufferFormatV2 buff = new BufferFormatV2((int)PackType.UpClose); buff.AddItem(downkey); SocketManager.Send(buff.Finish()); } } } } break; } } }