C# SolidWorks 二次開發 API --- 實例:打包文件

我們開發的程序使用過程中經常要使用一些做好的模板,尤其是參數化的時候,這樣就難免有一些文件需要從指定的地方複製過來,或者說還要把文件名替換掉,還可以加一些前綴或者後綴。這個例子也只是一個最簡單的打包方案,當然大家還可以參考API幫助文件中的Pack And Go函數來打包文件。

        /// <summary>
        /// 不打開文件,複製文件
        /// </summary>
        /// <param name="sourcefile">源文件路徑</param>
        /// <param name="target">目標文件</param>
        /// <param name="ReplaceFrom">需要替換的文件</param>
        /// <param name="ReplaceTo">替換成什麼</param>
        /// <param name="likeFile">是否模糊匹配</param>
        /// <param name="ReplaceFrom2">替換字符2</param>
        /// <param name="ReplaceTo2">第二次替換成什麼</param>
        /// <param name="likeFile2">模糊匹配?</param>
        public void CopySolidworksFile(string sourcefile, string target, string ReplaceFrom = "", string ReplaceTo = "", bool likeFile = true, string ReplaceFrom2 = "", string ReplaceTo2 = "", bool likeFile2 = false)
        {
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            target = System.IO.Path.GetDirectoryName(target) + @"\";

            int sourcecount = 0;

            string[] sourcefiles = null;

            string[] targetfiles = null;

            object[] depends;

            var sourcefileName = System.IO.Path.GetFileName(sourcefile);
            var oldSourcefiles = sourcefiles;
            sourcefiles = new string[sourcecount + 1];
            if (oldSourcefiles != null)
                Array.Copy(oldSourcefiles, sourcefiles, Math.Min(sourcecount + 1, oldSourcefiles.Length));
            var oldTargetfiles = targetfiles;
            targetfiles = new string[sourcecount + 1];
            if (oldTargetfiles != null)
                Array.Copy(oldTargetfiles, targetfiles, Math.Min(sourcecount + 1, oldTargetfiles.Length));
            sourcefiles[sourcecount] = sourcefile;
            progressBarCopy.Value = 10;
            if (ReplaceFrom != "")
            {
                if (likeFile == true)
                    targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom, ReplaceTo).Replace(ReplaceFrom2, ReplaceTo2);
                else if (sourcefileName.ToUpper() == ReplaceFrom.ToUpper())
                    targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom, ReplaceTo).Replace(ReplaceFrom2, ReplaceTo2);
                else
                    targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom2, ReplaceTo2);
            }
            else
                targetfiles[sourcecount] = target + sourcefileName;

            if (FileSystem.Dir(targetfiles[sourcecount]) != "")
            {
                if (Interaction.MsgBox(targetfiles[sourcecount] + "已經存在,是否替換?", Constants.vbYesNo, "文件打包") == Constants.vbNo)
                {
                    progressBarCopy.Value = 0;
                    return;
                }
            }

            try
            {
                FileSystem.FileCopy(sourcefiles[sourcecount], targetfiles[sourcecount]);
            }
            catch (Exception ex)
            {
            }
            progressBarCopy.Value = 35;
            sourcecount = sourcecount + 1;

            if (FileSystem.Dir(Strings.Replace(sourcefile, ".SLDASM", ".SLDDRW")) != "")
            {
                oldSourcefiles = sourcefiles;
                sourcefiles = new string[sourcecount + 1];
                if (oldSourcefiles != null)
                    Array.Copy(oldSourcefiles, sourcefiles, Math.Min(sourcecount + 1, oldSourcefiles.Length));
                oldTargetfiles = targetfiles;
                targetfiles = new string[sourcecount + 1];
                if (oldTargetfiles != null)
                    Array.Copy(oldTargetfiles, targetfiles, Math.Min(sourcecount + 1, oldTargetfiles.Length));

                sourcefiles[sourcecount] = Strings.Replace(sourcefile, ".SLDASM", ".SLDDRW");
                sourcefileName = System.IO.Path.GetFileName(sourcefiles[sourcecount]);
                if (ReplaceFrom != "")
                {
                    if (likeFile == true)
                        targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom, ReplaceTo).Replace(ReplaceFrom2, ReplaceTo2);
                    else if (sourcefileName.ToUpper() == ReplaceFrom.ToUpper())
                        targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom, ReplaceTo).Replace(ReplaceFrom2, ReplaceTo2);
                    else
                        targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom2, ReplaceTo2);
                }
                else
                    targetfiles[sourcecount] = target + sourcefileName;

                if (FileSystem.Dir(targetfiles[sourcecount]) != "")
                {
                    if (Interaction.MsgBox(targetfiles[sourcecount] + "已經存在,是否替換?", Constants.vbYesNo, "文件打包") == Constants.vbNo)
                        return;
                }

                try
                {
                    FileSystem.FileCopy(sourcefiles[sourcecount], targetfiles[sourcecount]);
                }
                catch (Exception ex)
                {
                }
                sourcecount = sourcecount + 1;
            }
            progressBarCopy.Value = 50;
            depends = (string[])swApp.GetDocumentDependencies2(sourcefile, true, true, false);

            if (depends == null)
                return;
            bool bRet;
            var idx = 1;

            while (idx <= Information.UBound(depends))
            {
                oldSourcefiles = sourcefiles;
                sourcefiles = new string[sourcecount + 1];
                if (oldSourcefiles != null)
                    Array.Copy(oldSourcefiles, sourcefiles, Math.Min(sourcecount + 1, oldSourcefiles.Length));
                oldTargetfiles = targetfiles;
                targetfiles = new string[sourcecount + 1];
                if (oldTargetfiles != null)
                    Array.Copy(oldTargetfiles, targetfiles, Math.Min(sourcecount + 1, oldTargetfiles.Length));

                sourcefiles[sourcecount] = depends[idx].ToString();
                sourcefileName = System.IO.Path.GetFileName(depends[idx].ToString());
                if (ReplaceFrom != "")
                {
                    if (likeFile == true)
                        targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom, ReplaceTo).Replace(ReplaceFrom2, ReplaceTo2);
                    else if (sourcefileName.ToUpper() == ReplaceFrom.ToUpper())
                        targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom, ReplaceTo).Replace(ReplaceFrom2, ReplaceTo2);
                    else
                        targetfiles[sourcecount] = target + sourcefileName.Replace(ReplaceFrom2, ReplaceTo2);
                }
                else
                    targetfiles[sourcecount] = target + sourcefileName;

                try
                {
                    FileSystem.FileCopy(sourcefiles[sourcecount], targetfiles[sourcecount]);
                }
                catch (Exception ex)
                {
                }

                idx = idx + 2;
                sourcecount = sourcecount + 1;
            }

            // swApp.SendMsgToUser("Done")
            progressBarCopy.Value = 80;
            for (int n = 0; n <= sourcecount - 1; n++)
            {
                var NewName = targetfiles[n];

                var RefQ = swApp.GetDocumentDependenciesCount(NewName, 1, 1) / (double)2;

                // Debug.Print(NewName & "--->參考文件有  " & RefQ)

                if (RefQ > 0)
                {
                    var q = 0;
                    for (q = 0; q <= sourcecount - 1; q++)
                    {
                        if (n == q)
                        {
                        }
                        else
                            bRet = swApp.ReplaceReferencedDocument(targetfiles[n], System.IO.Path.GetFileName(sourcefiles[q]), targetfiles[q]);
                    }
                }
            }

            progressBarCopy.Value = 95;
        }
  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章