c# - 当我尝试从中删除一行时,为什么我的文本文件不保存它的更改?
问题描述
只需为项目制作一个简单的“探鱼器”控制台应用程序。保存有关您捕获的鱼的信息,然后根据您正在寻找的鱼的种类以及如何捕获它为您检索信息。这是主要问题:我已经为用户添加了删除以前记录的捕获的功能。当您删除一个时,程序本身会在内存中识别出它,并且就您所见,它似乎已被删除。但是,一旦您关闭程序并读取实际的 CSV 文件或启动程序备份,删除的捕获仍然存在。在写入文件的过程中,我的逻辑似乎有问题。注意:我始终确保在运行程序时关闭文件以帮助防止损坏/故障。
我有一个 Journal 类,其中包含一个名为 Catches 的列表,该列表存储用户记录的所有捕获量。这是 Journal 的方法,当用户想要删除捕获时会提示他们。它列出了所有用户记录的捕获,然后删除逻辑在最后几行。
public void DeleteACatch()
{
int i = 1;
Console.WriteLine("**** Delete a Catch ****");
foreach(var ctch in catches)
{
Console.WriteLine($"{i} - {ctch.ToStringFormatted()}");
i++;
}
Console.Write("Enter number of catch to delete (0 to cancel): ");
int choice = int.Parse(Console.ReadLine());
if(choice == 0)
{
Console.WriteLine("Returning to main menu...");
return;
}
Catches.RemoveAt(choice - 1);
Send();
storageManager.Write();
Console.WriteLine("Catch deleted.");
}
这是 Journal 的发送方法。只需将数据发送到一个名为 StorageManager 的类的对象,该类包含一个名为 data 的 List,该 List 还包含 Catches。
public void Send()
{
storageManager.Data.Clear();
storageManager.Data = catches;
}
这是 StorageManager 的 Write 方法,它将存储在它的 List 中的 Catches 称为数据,然后用它覆盖 CSV 文件。
public void Write()
{
FileStream stream = new FileStream("FishFinderData.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter fileWriter = new StreamWriter(stream);
foreach (var d in data)
{
fileWriter.WriteLine($"{d.HourOfDay},{d.Location},{d.Species},{d.Bait}");
}
fileWriter?.Close();
}
解决方案
推荐阅读
- oracle - How to redirect from on url to another url in Oracle Http Server (OHS)
- javascript - 硬刷新后删除 sessionStorage
- tensorflow - CNN中的测试精度范围很大
- google-cloud-platform - Bigquery - 将月份提取为 2 位数字
- vue.js - 为什么即使我为 v-model 分配了一个字符串,我的 v-select 也没有任何默认值
- solana - 如何使用环境变量运行命令?(solana 验证器)
- mysql - 新物品在游戏中无法正确显示
- laravel - Laravel Jetstream - Inertia - Vue 在按钮单击时附加喷射流组件
- html - Angular product-details.component.html 对象可能是“未定义”
- spring-boot - Spring Boot Kafka 集成测试:Consumer 总是返回 0 条记录