You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# API开发SolidWorks插件加载SAT文件时LoadFile4调用失败(状态码1)

解决SolidWorks插件LoadFile4加载SAT返回状态码1的问题

针对你用LoadFile4加载SAT文件返回状态码1(无法读取文件)的问题,结合你的代码片段,整理几个关键排查和修复点:

  • 临时文件未完全写入就操作:
    你的代码中复制流到文件后直接调用SolidWorks API读取,但wfileStream还未完成写入和释放,文件流缓存可能未同步到磁盘,导致SolidWorks读取到不完整的SAT文件。
    修正方式:把wfileStream也放进using块自动释放,确保文件写入完成后再执行导入:

    using (Stream rStream = zipFileSystem.OpenFile(file, FileAccess.Read))
    using (var wfileStream = File.Create(fileNameToWorkOn))
    {
        rStream.CopyTo(wfileStream);
    } // 自动释放流,保证文件写入完整
    // 之后再执行SAT导入操作
    
  • 错误提前打开不存在的SLDPRT文件:
    代码中先调用OpenDoc6打开一个尚未生成的.SLDPRT文件,这不仅无意义,还可能干扰后续LoadFile4的正常执行。LoadFile4本身可以直接加载SAT并创建新零件文档,无需提前打开空零件,直接移除这行代码即可。

  • 导入数据类型不匹配:
    SAT文件对应的导入数据类型是ImportSATData,而非Import3DInterconnectData(后者用于3D互连格式导入),错误的类型会导致导入参数无效:

    // 替换原ImportData获取代码
    ImportSATData importData = (ImportSATData)mSldWorksApplication.GetImportFileData(fileNameToWorkOn);
    
  • 路径与权限检查:

    • 确认D:\temp目录有读写权限,避免SolidWorks无法读取临时文件
    • 用EndsWith(".SAT")替代Contains(".SAT")判断文件类型,避免文件名中间包含.SAT的误判
    • 检查file.EntityName是否包含特殊字符或多余路径,确保拼接后的fileNameToWorkOn是合法完整路径

修正后的核心代码片段参考:

foreach (var file in ListOfFiles)
{
    if (file.EntityName.ToUpper().EndsWith(".SAT"))
    {
        string fileNameToWorkOn = @"d:\temp\" + file.EntityName;
        
        // 完整写入临时文件
        using (Stream rStream = zipFileSystem.OpenFile(file, FileAccess.Read))
        using (var wfileStream = File.Create(fileNameToWorkOn))
        {
            rStream.CopyTo(wfileStream);
        }

        // 获取正确的SAT导入数据
        ImportSATData importData = (ImportSATData)mSldWorksApplication.GetImportFileData(fileNameToWorkOn);
        if (importData == null)
        {
            File.Delete(fileNameToWorkOn);
            continue;
        }

        // 加载SAT文件
        long status = 0;
        PartDoc swPart = (PartDoc)mSldWorksApplication.LoadFile4(fileNameToWorkOn, "r", importData, ref status);
        
        if (status == 0 && swPart != null)
        {
            ModelDoc2 swModel = (ModelDoc2)swPart;
            string fileNameToCreate = fileNameToWorkOn.ToUpper().Replace(".SAT", ".SLDPRT");
            // 保存为SLDPRT格式
            swModel.SaveAs4(fileNameToCreate, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null);
            // 关闭文档
            mSldWorksApplication.CloseDoc(fileNameToCreate);
        }

        // 清理临时文件
        File.Delete(fileNameToWorkOn);
    }
}

内容的提问来源于stack exchange,提问作者Poterie UN PETIT TOUR DE TERRE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:40:24