現象描述
上傳壓縮包(.rar),服務端解壓後解析 Shapefile,讀取 DBF 數據寫入 SQL Server,但 `dbfFileDataList` 始終為 null,導致入庫失敗。
核心排查步驟
- 驗證解壓結果:檢查 `deCompressFilePath` 目錄下是否確實生成了 `.shp`、`.shx`、`.dbf` 文件,文件大小是否正常。
- 獨立測試解析邏輯:編寫獨立控制台程序,直接讀取已解壓的文件,排除 Web 環境干擾。
- 檢查文件編碼與結構:DBF 文件可能存在編碼不匹配(如 GBK vs UTF-8)、字段定義異常導致解析器返回空集合。
- 異常捕獲與日誌:在 `readDbfile()` 內部添加 try-catch,記錄具體異常堆棧,而非僅返回 null。
常見原因與對策
- 解壓庫版本不兼容:確認 `OperateZipFile.UnRar` 支持該 RAR 版本,建議改用 `SharpCompress` 等成熟庫。
- 路徑拼接錯誤:`Path.Combine` 參數順序、目錄分隔符導致實際讀取路徑錯誤。
- 權限問題:ASP.NET 執行身份對解壓目錄無讀寫權限。
代碼改進建議
// 增加解壓後文件存在性檢查
var dbfPath = featureShapeFileParse.getDbfPath(deCompressFilePath);
if (!File.Exists(dbfPath)) {
Log.Error($"DBF 文件不存在: {dbfPath}");
return;
}
C# 解壓 Shapefile 後 DBF 讀取為 null,排查解壓完整性、解析器異常、文件編碼與權限問題。