这只会打开solidworks中的所有绘图文件,并将其保存为*.pdf文件。我只想在让它进入实际的绘图数据库(即我们的所有文件)之前,对它进行第二次观察,并希望它不会遇到任何错误。
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;
using System;
using System.IO;
namespace PDF.csproj
{
public partial class SolidWorksMacro
{
public void Main()
{
string pdfPath;
string Path = "C:\\Users\\SAFEROADS201\\Desktop\\01-VMS Trailer";
string txtPath = Path + "\\UpdatedPDFs.txt";
string Date = DateTime.Now.ToShortDateString();
string[] drwPaths = System.IO.Directory.GetFiles(Path, "*.slddrw", SearchOption.AllDirectories);
foreach (string s in drwPaths)
{
if (!s.Contains("~$"))
{
ModelDoc2 swDoc = null;
int longstatus = 0;
int longwarnings = 0;
pdfPath = s;
pdfPath = pdfPath.Replace("Drawings", "PDFs").Replace("SLDDRW", "PDF");
(new FileInfo(pdfPath)).Directory.Create();
swDoc = ((ModelDoc2)(swApp.OpenDoc6(s, 3, 0, "", ref longstatus, ref longwarnings)));
longstatus = swDoc.SaveAs3(pdfPath, 0, 0);
swDoc = null;
swApp.CloseAllDocuments(true);
}
}
System.IO.File.WriteAllText(txtPath, Date);
}
/// <summary>
/// The SldWorks swApp variable is pre-assigned for you.
/// </summary>
public SldWorks swApp;
}
}发布于 2015-01-16 07:46:07
camelCase大小写来命名它们。foreach (string s in drwPaths)这样的名称。var,如var path =“C:\Users 201\Desktop\01-VMS拖车”;System.IO.Path.Combine()方法来组合文件。Directory.EnumerateFiles()而不是Directory.GetFiles()。来自文档 of GetFiles():EnumerateFiles和GetFiles方法的不同之处在于:当使用EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合;使用GetFiles时,必须等待返回整个名称数组后才能访问数组。因此,当您处理许多文件和目录时,EnumerateFiles可以更高效。verbatim string literal,以忽略转义序列。参见此所以回答让我们从引入一个名为SolidWorkFileConverter的新类开始,添加一个构造函数并添加一个名为ToPdf()的方法
public class SolidWorkFileConverter
{
private SldWorks swApplication;
public SolidWorkFileConverter(SldWorks swApp)
{
swApplication = swApp;
}
public void ToPdf(string searchPath, string logFileName)
{
var logFileDestionation = System.IO.Path.Combine(searchPath, logFileName);
var currentDate = DateTime.Now;
var drawingFiles = System.IO.Directory.EnumerateFiles(Path, "*.slddrw", SearchOption.AllDirectories)
.Where(file => !file.Contains("~$"));
foreach (var drawingFile in drawingFiles)
{
ToPdf(drawingFile);
}
WriteToLog(logFileDestination, currentDate);
}
public void ToPdf(string drawingFile)
{
string destinationFileName = ComposeDestinationFileName(drawingFile);
CreateDestinationDirectory(destinationFileName);
int state = 0;
int warningState = 0;
ModelDoc2 swDoc = (ModelDoc2)(swApplication.OpenDoc6(s, 3, 0, "", ref state, ref warningState));
state = swDoc.SaveAs3(pdfPath, 0, 0);
swDoc = null;
swApplication.CloseAllDocuments(true);
}
private string ComposeDestinationFileName(string sourceFileName)
{
return sourceFileName.Replace("Drawings", "PDFs").Replace("SLDDRW", "PDF");
}
private void CreateDestinationDirectory(string destinationFileName)
{
string directoryName = System.IO.Path.GetDirectoryName(destinationFileName);
System.IO.Directory.CreateDirectory(directoryName);
}
private void WriteToLog(string logFileDestination, DateTime currentDate)
{
System.IO.File.WriteAllText(logFileDestination, currentDate.ToShortDateString());
}
}现在,您的main()方法(或在任何地方使用)都可以调用它,例如
string searchPath = @"C:\Users\SAFEROADS201\Desktop\01-VMS Trailer";
string logFileName = System.IO.Path.Combine(searchPath , "UpdatedPDFs.txt");
SolidWorkFileConverter converter = new SolidWorkFileConverter(swApp);
converter.ToPdf(searchPath, logFileName);https://codereview.stackexchange.com/questions/77666
复制相似问题