热成像thing图片保存的炮号机制

炮号命名

定义一个初始化炮号方法

public void InitializeSaveIndex()
{
    string saveDirectory = myConfig.savePath1; // 修改为实际保存目录
    
    string saveFolder = saveDirectory; 
    if (!Directory.Exists(saveFolder))
    {        
        saveIndex = 1;
        return;
    }
    var files = Directory.GetFiles(saveFolder, "*.jpg");
    int maxIndex = 0;      
    foreach (var file in files)
    {
        var filename = System.IO.Path.GetFileName(file);
        var match = nameRegex.Match(filename);
        if (match.Success && int.TryParse(match.Groups[1].Value, out int idx))
        {
            if (idx > maxIndex) maxIndex = idx;
        }
    }
    saveIndex = maxIndex + 1;
    Console.WriteLine($"初始化保存序号,下一张图片序号为 {saveIndex}");
}

读取文件中上次保存的炮号,找到最新的炮号,初始化本次的saveindex

string filename1 = System.IO.Path.Combine(saveFolder, $"{saveIndex}.jpg");
saveIndex++;

在保存图片时选择saveindex命名,并使saveindex加一,即可实现炮号功能

内存清理

 public void CleanupOldImages()
 {
     try
     {
         var files = Directory.GetFiles(myConfig.savePath1, "*.jpg");
         // 解析文件名中的序号并排序
         var indexed = files
             .Select(f =>
             {
                 var name = System.IO.Path.GetFileName(f);
                 var m = nameRegex.Match(name);
                 if (m.Success && int.TryParse(m.Groups[1].Value, out int idx))
                     return new { Index = idx, Path = f };
                 return null;
             })
             .Where(x => x != null)
             .OrderBy(x => x.Index)
             .ToList();

         int excess = indexed.Count - maxKeep;
         if (excess > 0)
         {
             // 删除最早的 excess 个文件
             for (int i = 0; i < excess; i++)
             {
                 var p = indexed[i].Path;
                 try
                 {
                     File.Delete(p);
                     //Console.WriteLine($"已删除旧图片:{p}");
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine($"删除文件失败 ({p}): {ex.Message}");
                     // 继续尝试删除其它文件
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine($"清理旧图片时出错: {ex.Message}");
     }            
 }

还是和之前一样找到保存的文件夹并进行炮号排序,找出最新炮号后,根据你想保存的图片数量,用最新的炮号减去这个数量,把每个炮号和这个减去后得到的数值进行比较,小于这个数的就删去。

数据上传

string[] filename2;
filename2 = new string[] { filename1 };    
[Cfet2Status]
public string[] FullDataFilePaths
{
    get { return filename2; } 

}

创建一个CFET状态方法“FullDataFilePaths”,返回你的图片保存路径,运行另一个数据上传的thing,它会调用这个状态方法,取得你的保存路径,并将其中的数据上传。


本文章使用limfx的vscode插件快速发布