コード例 #1
0
        /// <summary>
        /// 这个方法会被递归调用,所以要小心调用。
        /// </summary>
        /// <param name="folderFullName"></param>
        /// <param name="parentTree"></param>
        private void CopyAndImportLocalDirectory(DirectoryInfo folderFullName, CodeFolder parentTree = null)
        {
            var codeTree = new CodeFolder();

            codeTree.Id   = Guid.NewGuid().ToString();
            codeTree.Text = folderFullName.Name;
            if (parentTree != null)
            {
                codeTree.ParentId = parentTree.Id;
            }
            copyFolderList.Add(folderFullName.FullName, codeTree);

            FileSystemInfo[] subFiles = folderFullName.GetFiles();


            var count = 0;

            foreach (FileInfo item in subFiles)
            {
                if (!item.Exists)
                {
                    continue;
                }

                if (!SAPINT.Gui.Util.FileUtil.IsTextFile(item.FullName))
                {
                    continue;
                }
                StreamReader sr = new StreamReader(item.FullName, Encoding.Default);
                String       s  = sr.ReadToEnd();
                sr.Close();
                //if (s.Length > 3*1024 * 1024)
                //{
                //    continue;
                //}
                var code = new Code();
                code.Title   = item.Name;
                code.Content = s;
                // code.Content = s.Replace("UTF-8", "GB2312");
                code.TreeId = codeTree.Id;
                copyCodeList.Add(code);
                count++;
                setProcessBar(subFiles.Count(), count, folderFullName.FullName, item.Name);

                //为了提高性能,每超过100个文档就保存一次。
                //因为每个文档内容都包含内容,如果文档的大小超过1M,那100
                //个文档会就100M的内存消耗。
                //如果没有超过100个文档在方法递归完成后再保存。
                if (copyCodeList.Count == 100)
                {
                    db.SaveCodeList(copyCodeList);
                    db.SaveFolderList(copyFolderList);
                    copyCodeList.Clear();
                    copyFolderList.Clear();
                }
            }

            var subDirectories = folderFullName.GetDirectories();

            if (subDirectories.Count() > 0)
            {
                foreach (var item in subDirectories)
                {
                    if (item.Exists)
                    {
                        CopyAndImportLocalDirectory(item, codeTree);
                    }
                }
            }
        }
コード例 #2
0
        private bool LoadObjectFromSap(BackgroundWorker bw, bool Saved = true)
        {
            List <Code>            list = new List <Code>();
            Dictionary <int, Code> pos  = new Dictionary <int, Code>();

            this.AbapCode = new SAPINT.Utils.ABAPCode(SapSysName);
            var itemCount = 0;
            var processed = 0;

            var m_isCacelling = false;

            foreach (DataRow item in dt.Rows)
            {
                if (this.backgroundWorker1.CancellationPending)
                {
                    m_isCacelling = true;
                }
                if (String.IsNullOrWhiteSpace(item["Select"].ToString()))
                {
                    continue;
                }
                var isSelect = (bool)item["Select"];
                if (isSelect)
                {
                    var obj = item["NAME"].ToString();
                    if (String.IsNullOrEmpty(obj))
                    {
                        continue;
                    }

                    var codes = AbapCode.GetSourceCode(obj);

                    var sb = new StringBuilder();

                    codes.ForEach(x => sb.AppendLine(x));
                    item["Lines"] = codes.Count;


                    var abapCode = sb.ToString();
                    item["Length"] = Util.FileUtil.FormatFileSize(abapCode.Length);
                    item["Header"] = abapCode;

                    if (String.IsNullOrEmpty(abapCode))
                    {
                        continue;
                    }
                    var comments = new StringBuilder();
                    foreach (var comment in codes)
                    {
                        if (comment.StartsWith("*"))
                        {
                            comments.AppendLine(comment);
                        }
                        if (comments.ToString().ToList().Count > 10)
                        {
                            break;
                        }
                    }
                    Code code = new Code();

                    code.Content = abapCode;
                    code.Desc    = comments.ToString();
                    code.Title   = obj;
                    if (!String.IsNullOrEmpty(this.TreeId))
                    {
                        code.TreeId = TreeId;
                    }
                    list.Add(code);
                    var index = int.Parse(item["Index"].ToString());
                    pos.Add(index, code);
                    var pTime = new System.TimeSpan(pauseTime);
                    Thread.Sleep(pTime);//必须暂停,因为在SAP系统中读取程序不会那么快。
                    //每100行保存一次
                    itemCount++;
                    if (itemCount == 100 && dt.Rows.Count >= 100 && m_isCacelling == false)
                    {
                        if (true == Saved)
                        {
                            this.cbxDbSources.Enabled = false;
                            db.SaveCodeList(list);
                            this.cbxDbSources.Enabled = true;
                        }
                        foreach (var positem in pos)
                        {
                            dt.Rows[positem.Key]["CodeId"] = positem.Value.Id;
                            dt.Rows[positem.Key]["Select"] = false;
                        }
                        pos.Clear();
                        list.Clear();
                        itemCount = 0;
                    }
                    else
                    {
                        if (true == Saved)
                        {
                            this.cbxDbSources.Enabled = false;
                            db.SaveCodeList(list);
                            this.cbxDbSources.Enabled = true;
                        }

                        foreach (var positem in pos)
                        {
                            dt.Rows[positem.Key]["CodeId"] = positem.Value.Id;
                            dt.Rows[positem.Key]["Select"] = false;
                        }
                        pos.Clear();
                        list.Clear();
                        itemCount = 0;
                    }
                    processed++;
                    ImportMessage m = new ImportMessage()
                    {
                        current = processed, total = selectedItems, progName = obj
                    };
                    bw.ReportProgress(processed, m);
                    //如果要取消,保存后退出.
                    if (m_isCacelling == true)
                    {
                        break;
                    }
                }
            }
            return(true);
            //if (db.SaveCodeList(list))
            //{
            //    foreach (var item in pos)
            //    {
            //        dt.Rows[item.Key]["CodeId"] = item.Value.Id;
            //    }
            //    return true;
            //}
            //else
            //{
            //    return false;
            //}
        }