private void btnfresh_Click(object sender, EventArgs e) { _mTreeExpand.Clear();//清空扩展信息 // 记录树结构 Point pos = tvFiles.AutoScrollOffset; foreach (TreeNode n in tvFiles.Nodes) { ForeachTree(n, "", 4); } this.cmbDirs.Text = _dbFile.GetWindowRootPath(); TreeNode root = new TreeNode(); //根目录名称 root.Text = "目录"; //根目录路径 SynCommon.GetFiles(this.cmbDirs.Text, root, lvTask); tvFiles.Nodes.Clear(); foreach (TreeNode n in root.Nodes) { tvFiles.Nodes.Add(n); } _dbFile.SetWindowRootPath(this.cmbDirs.Text); // 恢复树结构 foreach (TreeNode n in tvFiles.Nodes) { ForeachTree(n, "", 5); } tvFiles.AutoScrollOffset = pos; }
//@brief 加载任务 public void LoadTask(ListView ls) { if (!_init) { return; } string value = _appTasks.GetValue("Tasks"); if (string.IsNullOrEmpty(value)) { return; } ls.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度 string[] arr = value.Split(';'); foreach (string s in arr) { string[] arr2 = s.Split(','); if (arr2.Length != 2) { continue; } ListViewItem lvi = new ListViewItem(); lvi.Tag = arr2[0]; string filePath = arr2[0]; lvi.Text = SynCommon.ShortFilePath(filePath); lvi.SubItems.Add(arr2[1]); ls.Items.Add(lvi); } ls.EndUpdate(); //结束数据处理,UI界面一次性绘制。 }
public void SynFile(string fileFullName, string linuxDir) { if (!File.Exists(fileFullName)) // 文件不存在。 { return; } if (fileFullName.LastIndexOf('\\') == fileFullName.Length - 1) { _mainForm.Log("不支持同步目录"); return; } System.IO.FileInfo file = new System.IO.FileInfo(fileFullName); if (file.Length > N) { MessageBox.Show("同步的文件过大" + fileFullName); return; } _mainForm.Log(SynCommon.ShortFilePath(fileFullName) + " -> " + linuxDir); try { // 判断文件编码方式 Encoding encode = EncodingType.GetType(fileFullName); StreamReader srNew = null; if (encode != Encoding.UTF8) { srNew = new StreamReader(fileFullName, Encoding.Default); } else { srNew = new StreamReader(fileFullName, Encoding.UTF8); } string con = srNew.ReadToEnd(); // 把windows换行符转换成linux换行符 con = con.Replace("\r\n", "\n"); // 如果文件名称后缀已.cpp .h 结尾 则 转换成utf8编码 if (fileFullName.ToLower().EndsWith(".cpp") || fileFullName.ToLower().EndsWith(".h") || fileFullName.ToLower().EndsWith(".jce") ) { if (encode != Encoding.UTF8) { con = CFileComm.gb2312_utf8(con); } } srNew.Close(); UInt64 last_update_tm = SynCommon.ToUTCSec(file.LastWriteTime); FillMessage(linuxDir, file.Name, last_update_tm, con); // 想服务器发送数据 SendData(_sendData); RecevData(); } catch (IOException e) { _mainForm.Log(e.ToString()); } }
private void Main_Form_Load(object sender, EventArgs e) { _synFiles = new CSynFiles(this, _dbFile); // 同步文件的类 Random ran = new Random((int)DateTime.Now.Ticks); this.lbx_linux_dirs.HorizontalScrollbar = true; // 连接服务器 //Connnet(); // 初试话listView ColumnHeader ch = new ColumnHeader(); ch.Text = "文件名称"; //设置列标题 ch.Width = 400; //设置列宽度 ch.TextAlign = HorizontalAlignment.Left; //设置列的对齐方式 this.lvTask.Columns.Add(ch); //将列头添加到ListView控件。 this.lvTask.Columns.Add("linux目录", 500, HorizontalAlignment.Left); LoadComBox(); // 加载任务 // _dbFile.LoadTask(this.lvTask); _dbFile.LoadDir(this.lbx_linux_dirs); // 初始化树形目录 this.cmbDirs.Text = _dbFile.GetWindowRootPath(); TreeNode root = new TreeNode(); //根目录名称 root.Text = "目录"; //根目录路径 SynCommon.GetFiles(this.cmbDirs.Text, root, lvTask); tvFiles.Nodes.Clear(); foreach (TreeNode n in root.Nodes) { tvFiles.Nodes.Add(n); } _dbFile.SetWindowRootPath(this.cmbDirs.Text); // 加载当前同步目录 _dbFile.LoadSynDirectory(); CSynDirectory synDir = _dbFile._synDirectory; // 目录同步 foreach (CSynDirectoryItem item in synDir.lsItems) { CFileWatcher fileWatch = new CFileWatcher(this, item.win_dir, item.linux_dir); fileWatch._allFileWatch = _lsFileWatches; _lsFileWatches.Add(fileWatch); } }
private void cmbDirs_SelectedIndexChanged(object sender, EventArgs e) { if (cmbDirs.Text != "") { TreeNode root = new TreeNode(); //根目录名称 root.Text = "目录"; //根目录路径 SynCommon.GetFiles(this.cmbDirs.Text, root, lvTask); tvFiles.Nodes.Clear(); foreach (TreeNode n in root.Nodes) { tvFiles.Nodes.Add(n); } _dbFile.SetWindowRootPath(this.cmbDirs.Text); lbx_linux_dirs.Items.Clear(); _dbFile.LoadDir(lbx_linux_dirs); } }
private int RecevData() { int iRet = 0; _receData = br.ReadBytes(8); if (_receData.Length != 8) { _mainForm.Log("读取开头8字节失败!"); return(-1); } int dataLen = SynCommon.bytesToInt(_receData, 0); // 读取剩余数据 int retCode = SynCommon.bytesToInt(_receData, 4); _receData = br.ReadBytes(dataLen - 8); // 长度,和返回值其余部分 string msg = System.Text.Encoding.UTF8.GetString(_receData); _mainForm.Log("服务器: 长度:" + dataLen + "返回值:" + retCode + " msg:" + msg + Environment.NewLine + " " + Environment.NewLine + " "); return(iRet); }
// 刷新界面所有的数据 private void RefushAll() { LoadComBox(); // 加载任务 _dbFile.LoadTask(this.lvTask); _dbFile.LoadDir(this.lbx_linux_dirs); // 初始化树形目录 this.cmbDirs.Text = _dbFile.GetWindowRootPath(); TreeNode root = new TreeNode(); //刷新树形目录 root.Text = "目录"; SynCommon.GetFiles(this.cmbDirs.Text, root, lvTask); tvFiles.Nodes.Clear(); foreach (TreeNode n in root.Nodes) { tvFiles.Nodes.Add(n); } // 设置当前同步的目录 _dbFile.SetWindowRootPath(this.cmbDirs.Text); }
private void btnSelectDir_Click(object sender, EventArgs e) { this.cmbDirs.Text = _dbFile.GetWindowRootPath(); this.folderBrowserDialog1.SelectedPath = this.cmbDirs.Text; if (this.folderBrowserDialog1.ShowDialog() == DialogResult.OK) { this.cmbDirs.Text = this.folderBrowserDialog1.SelectedPath; TreeNode root = new TreeNode(); //根目录名称 root.Text = "目录"; //根目录路径 SynCommon.GetFiles(this.cmbDirs.Text, root, lvTask); tvFiles.Nodes.Clear(); foreach (TreeNode n in root.Nodes) { tvFiles.Nodes.Add(n); } _dbFile.SetWindowRootPath(this.cmbDirs.Text); _dbFile.LoadDir(lbx_linux_dirs); LoadComBox(); } }
private void ForeachTree(TreeNode node, string dir, int flag = 1) { string filePath = node.Tag as string; if (flag == 1) { // 添加到任务中 if (node.Checked && SynCommon.IsFile(filePath)) { bool isExist = false; foreach (ListViewItem it in lvTask.Items) { string fullPath = it.Tag as string; if (fullPath == filePath) { isExist = true; } } if (!isExist)// 如果文件不在里面, 则添加 { // 添加到 this.lvTask.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度 ListViewItem lvi = new ListViewItem(); lvi.Tag = filePath; lvi.Text = SynCommon.ShortFilePath(filePath); lvi.SubItems.Add(dir); this.lvTask.Items.Add(lvi); this.lvTask.EndUpdate(); //结束数据处理,UI界面一次性绘制。 } } } else if (flag == 2)// 刷新目录树 { bool isExist = false; foreach (ListViewItem it in lvTask.Items) { string fullPath = it.Tag as string; if (fullPath == filePath) { isExist = true; } } if (isExist) { node.Checked = true; } else { node.Checked = false; } } else if (flag == 3) // 选中listView { if (lvTask.SelectedItems.Count > 0) { string fullName = lvTask.SelectedItems[0].Tag as string; if (filePath == fullName) { node.EnsureVisible(); } } } else if (flag == 4)// 保存每个节点的展开结构 { _mTreeExpand[node.Tag as string] = node.IsExpanded; if (node.IsSelected) // 记录选中节点的Tag路径 { _selectNodeTag = node.Tag as string; } } else if (flag == 5)// 回复每个节点的展开结构 { bool value = false; if (_mTreeExpand.TryGetValue(node.Tag as string, out value)) { if (value) { node.Expand(); } } if (node.Tag as string == _selectNodeTag) { node.EnsureVisible(); } } foreach (TreeNode n in node.Nodes) { ForeachTree(n, dir, flag); } }