using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Compression;
namespace SmartScanner
{
public static class LBProjService
{
private const string ConfigFileName = "config.json";
private const string ModelNameFileName = "model_name.txt";
private const string ModelDir = "model"; // 固定模型目录
///
/// 创建临时目录
///
private static string CreateTempDirectory()
{
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(tempDir);
return tempDir;
}
///
/// 获取所有可用模型
///
public static string[] GetAvailableModels()
{
string modelPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ModelDir);
if (!Directory.Exists(modelPath))
{
Directory.CreateDirectory(modelPath);
return Array.Empty();
}
return Directory.GetFiles(modelPath, "*.lb")
.Select(Path.GetFileName)
.ToArray();
}
///
/// 创建工程文件
///
public static (bool Success, string Message) CreateLBProj(
string paramFilePath,
string modelFileName,
string outputPath)
{
try
{
// 验证模型是否存在
string fullModelPath = Path.Combine(ModelDir, modelFileName);
if (!File.Exists(fullModelPath))
{
return (false, $"模型文件 {modelFileName} 不存在于 {ModelDir} 目录");
}
// 创建临时目录并打包
string tempDir = CreateTempDirectory();
try
{
// 1. 保存参数文件
File.Copy(paramFilePath, Path.Combine(tempDir, ConfigFileName), true);
// 2. 保存模型文件名(非路径)
File.WriteAllText(Path.Combine(tempDir, ModelNameFileName), modelFileName);
// 3. 创建ZIP包
ZipFile.CreateFromDirectory(tempDir, outputPath);
return (true, "工程文件创建成功");
}
finally
{
Directory.Delete(tempDir, true);
}
}
catch (Exception ex)
{
return (false, $"创建失败: {ex.Message}");
}
}
///
/// 加载工程文件
///
public static (string ModelName, string configPath, string ConfigContent, string Message) LoadLBProj(string projectFilePath)
{
try
{
string tempDir = CreateTempDirectory();
try
{
ZipFile.ExtractToDirectory(projectFilePath, tempDir);
// 1. 读取模型文件名
string modelNameFile = Path.Combine(tempDir, ModelNameFileName);
if (!File.Exists(modelNameFile))
{
return (null, null, null, "工程文件中缺少模型名称记录");
}
string modelName = File.ReadAllText(modelNameFile);
// 2. 验证模型是否存在
string fullModelPath = Path.Combine(ModelDir, modelName);
if (!File.Exists(fullModelPath))
{
return (null, null, null, $"模型 {modelName} 不存在于 {ModelDir} 目录");
}
// 3. 读取配置
string configPath = Path.Combine(tempDir, ConfigFileName);
string configContent = File.ReadAllText(configPath);
return (modelName, configPath, configContent, "加载成功");
}
finally
{
Directory.Delete(tempDir, true);
}
}
catch (Exception ex)
{
return (null, null, null, $"加载失败: 请输入正确的工程文件路径: {ex.Message}");
}
}
}
}