首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# DataGridView 數據導出加密時「索引超出數組界限」的根因與修復

     編輯:程式設計綜合問答

錯誤代碼片段

for (int i = 1; i < lines.Length; i++) {
    string[] linecell = lines[i].Split(new char[] { ',' });
    if (linecell.Length > 2) {
        richTextBox2.Text += "\r\n" + linecell[2];
    }
    string aaa = AES.AESEncrypt(richTextBox2.Text); // 錯誤:反覆加密累積文本
    richTextBox2.Text = aaa + "\r\n";
}

核心問題

  1. 邏輯倒置:應加密單元格值 `linecell[2]`,而非整個 `richTextBox2.Text`。
  2. 數組越界風險:`linecell.Length > 2` 保證索引 2 存在,但若 CSV 包含引號逗號,`Split(',')` 會誤切分,導致實際字段數不足。
  3. 累積加密:每次循環將整個文本框內容重新加密,導致長度指數增長,最終內存溢出或界面卡死。

修正代碼

var sb = new StringBuilder();
for (int i = 1; i < lines.Length; i++) {
    // 推薦使用 TextFieldParser 或 CsvHelper 正確解析 CSV
    var cells = lines[i].Split(','); // 簡易示例
    if (cells.Length > 2) {
        string encrypted = AES.AESEncrypt(cells[2]); // 單獨加密該字段
        sb.AppendLine(encrypted);
    }
}
richTextBox2.Text = sb.ToString();

最佳實踐

  • 引入 `CsvHelper` 庫健壯解析 CSV(支持引號、換行轉義)。
  • 加密操作拆離 UI 線程,避免界面凍結。
  • 異常捕獲具體行號,便於定位髒數據。

C# DataGridView CSV 導出加密,索引越界根因,Split 解析 CSV 缺陷,CsvHelper 庫推薦,StringBuilder 優化性能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved