text

为了解决问题,我们需要对代码进行以下调整:

**问题1:第二张图片无法写入CSV文件**

**原因分析:**
生成的CSV文件被`ProcessCsvFile`移动到目标文件夹,导致后续图片处理时原文件夹中不存在CSV文件,无法追加数据。

**解决方案:**
将生成的CSV文件直接写入目标文件夹,避免被移动。

**修改步骤:**

1. **调整`UpdateCsvFile`方法中的CSV路径生成逻辑:**
在`UpdateCsvFile`中根据处理类型确定目标文件夹,确保CSV文件直接生成在目标位置。

2. **确保目标文件夹存在:**
在写入CSV文件前检查并创建目标文件夹。

**修改后的`UpdateCsvFile`方法:**

```csharp

private void UpdateCsvFile(string imagePath, string processedData, string processType)
{
    string csvFileName = "";
    string[] headers = null;
    string destinationFolder = "";

    switch (processType)
    {
        case "eyes_holes":
            csvFileName = "FingerPressStatus.csv";
            headers = new string[] { "Time", "ItemName", "MachineType", "CellNo", "BarCode", "PinStatus", "EyeHoles_Center_X(pixcel)", "EyeHoles_Center_Y(pixcel)", "X_offset(pixcel)" };
            destinationFolder = @"C:\Users\m088629\Desktop\Opencv--vision\DataLog\FingerPressStatus";
            break;
        case "push_pin":
            csvFileName = "PushPinAbnormal.csv";
            headers = new string[] { "Time", "ItemName", "MachineType", "CellNo", "PinStatus", "Up_PinCenter_X(pixcel)", "Up_PinCenter_Y(pixcel)", "Upside_Distance(pixcel)", "Bottom_PinCenter_X(pixcel)", "Bottom_PinCenter_Y(pixcel)", "Bottomside_Distance(pixcel)" };
            destinationFolder = @"C:\Users\m088629\Desktop\Opencv--vision\DataLog\PushPinMonitor";
            break;
        case "slider":
            csvFileName = "SuspensionDamaged.csv";
            headers = new string[] { "Time", "ItemName", "MachineType", "CellNo", "BarCode", "OCR_SN", "Up_Edge_Angle(degree)", "Down_Edge_Angle(degree)" };
            destinationFolder = @"C:\Users\m088629\Desktop\Opencv--vision\DataLog\SliderAngleOnIHS";
            break;
        default:
            throw new ArgumentException("Invalid process type.");
    }

    // 确保目标文件夹存在
    if (!Directory.Exists(destinationFolder))
    {
        Directory.CreateDirectory(destinationFolder);
    }

    string csvFilePath = Path.Combine(destinationFolder, csvFileName);

    // 如果文件不存在,创建并写入标题行
    if (!File.Exists(csvFilePath))
    {
        using (StreamWriter writer = new StreamWriter(csvFilePath))
        {
            writer.WriteLine(string.Join(",", headers));
        }
    }

    // 追加数据
    using (StreamWriter writer = new StreamWriter(csvFilePath, true))
    {
        writer.WriteLine(processedData);
    }
}

 

```

**问题2:移动CSV文件时路径不存在**

**原因分析:**
目标文件夹不存在导致移动文件时抛出`DirectoryNotFoundException`。

**解决方案:**
在移动文件前创建目标文件夹。

**修改`ProcessCsvFile`中的文件移动逻辑:**

```csharp

// 移动文件到目标文件夹
string destinationFolder = GetDestinationFolder(fileName);
if (string.IsNullOrEmpty(destinationFolder))
{
    Save_log("No matching destination folder for file: " + fileName);
    continue;
}

// 创建目标文件夹(如果不存在)
Directory.CreateDirectory(destinationFolder);

string newFileName = GetNewFileName(fileName, signalTime);
string destinationFilePath = Path.Combine(destinationFolder, newFileName);

if (File.Exists(destinationFilePath))
{
    File.Delete(destinationFilePath);
}

File.Move(csvFile, destinationFilePath);

 

```

**总结:**
通过将生成的CSV文件直接写入目标文件夹,并在移动文件前确保目标路径存在,可以解决两个问题。这样避免了原文件夹中的文件被移动导致后续写入失败,同时确保文件操作路径正确无误。

posted @ 2025-05-12 00:26  王家怿  阅读(13)  评论(0)    收藏  举报