0

每次我向某个 ID 添加新价格时,我都会尝试更新我的文件。

我有一个 .csv 文件,其中包含多行,例如 ID、姓名、地址、州、邮编、年龄、已订购。所有 Ordered 字段都以 0 开头。

现在,我有一个表单,您可以在其中选择 ID 并插入价格....我希望将该价格添加到 .csv 中的 Total Ordered 中。

所以本质上,如果 Ordered 从 0 开始并且我添加了 11.45 的价格..新的 .csv 应该在 Ordered 行中反映 11.45.. 然后,如果我再次打开表单并添加另一个 2.00 的价格...新的订购将是 13.45。

    public void Customer()
    {
        string name = "";
        string address = "";
        string state = "";
        int customerID = 0;
        int zip = 0;
        int age = 0;
        double Ordered = 0;

        Customer[] Array = Customer.getAll();

        for (int k = 0; k < Array.Length; k++)
        {
            if (Array[k] != null)
            {
                ID = Array[k].getID();
                if (Convert.ToInt32(Field.Text) == ID)
                {
                    ID = Array[k].getID();
                    name = Array[k].getName();
                    address = myCustArray[k].getAddress();
                    state = myCustArray[k].getState();
                    zip = myCustArray[k].getZip();
                    age = myCustArray[k].getAge();
                    Ordered = (Array[k].getOrdered()
                    + Convert.ToDouble(PriceField.Text));

                    using (FileStream fs = new FileStream(@"customer.csv",FileMode.Append, FileAccess.Write))
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        sw.WriteLine(customerID + "," + name + "," + address + "," + state + "," + zip + "," + age + "," + totalOrdered + "/r/n");
                    }
                }
            }
        }
    }
}

}

4

1 回答 1

1

唯一的方法是用新数据重写文件。

从理论上讲,您可以打开文件进行写入,寻找要更改的值的位置,然后写入新值,但该新值必须与该值相同(以字符数计)它正在替换,因为您无法扩展或缩小文件中可用的空间。而且您还需要解析文件以找到放置值的正确位置。

更新

正如您所建议的,将数据写成一个完整的行将是一种更简单的方法。不过,您需要执行以下操作。

  1. 打开源文件进行阅读
  2. 创建一个用于写入的新文件
  3. 从源文件中读取行并将它们写入目标文件,直到找到要更改的行
  4. 使用数组中的数据写入新行,而不是源文件中的行
  5. 继续将行从源复制到目标。
  6. 关闭两个文件
  7. 删除源文件
  8. 重命名目标文件以替换源文件。

或者,如果您的数组包含 CSV 中的所有数据,您可以将其转储到新的 CSV,然后执行上面的 7 和 8。

于 2012-12-13T03:15:41.220 回答