コード例 #1
0
ファイル: Main_Form.cs プロジェクト: dyc0113/learn
        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;
        }
コード例 #2
0
        //@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界面一次性绘制。
        }
コード例 #3
0
ファイル: CSynFiles.cs プロジェクト: dyc0113/learn
        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());
            }
        }
コード例 #4
0
ファイル: Main_Form.cs プロジェクト: dyc0113/learn
        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);
            }
        }
コード例 #5
0
ファイル: Main_Form.cs プロジェクト: dyc0113/learn
 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);
     }
 }
コード例 #6
0
ファイル: CSynFiles.cs プロジェクト: dyc0113/learn
        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);
        }
コード例 #7
0
ファイル: Main_Form.cs プロジェクト: dyc0113/learn
        // 刷新界面所有的数据
        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);
        }
コード例 #8
0
ファイル: Main_Form.cs プロジェクト: dyc0113/learn
 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();
     }
 }
コード例 #9
0
ファイル: Main_Form.cs プロジェクト: dyc0113/learn
        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);
            }
        }