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文件直接写入目标文件夹,并在移动文件前确保目标路径存在,可以解决两个问题。这样避免了原文件夹中的文件被移动导致后续写入失败,同时确保文件操作路径正确无误。

浙公网安备 33010602011771号