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