Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 程序在第三次编译后擦除序列化数据_C#_Serialization - Fatal编程技术网

C# 程序在第三次编译后擦除序列化数据

C# 程序在第三次编译后擦除序列化数据,c#,serialization,C#,Serialization,问题 启动1:本机启动,无问题,退出时保存当前状态 启动2:加载保存的数据,无问题,退出时保存当前状态 Launch 3:出于某种原因,返回到本机Launch,其中所有内容都处于默认位置 代码 private void Form1_Load(object sender, EventArgs e) { GenerateTestData(); //use method to create data upon load DisplayEmployeeData(employees, superviso

问题

启动1:本机启动,无问题,退出时保存当前状态

启动2:加载保存的数据,无问题,退出时保存当前状态

Launch 3:出于某种原因,返回到本机Launch,其中所有内容都处于默认位置


代码

private void Form1_Load(object sender, EventArgs e)
{
GenerateTestData(); //use method to create data upon load
DisplayEmployeeData(employees, supervisors); //use method to display data upon load
RedundancyCheck();
}



GenerateTestData Method 

public void GenerateTestData()
    {
        Employee e1 = new Employee(MemberJob.Employee, "Name1", MemberSkills.CPlus | MemberSkills.CSharp, false);
        Employee e2 = new Employee(MemberJob.Employee, "Name2", MemberSkills.CSharp | MemberSkills.Oracle | MemberSkills.CPlus, false);
        Employee e3 = new Employee(MemberJob.Employee, "Name3", MemberSkills.CSharp | MemberSkills.Javascript, false);
        Supervisor e4 = new Supervisor(MemberJob.Supervisor, "Name4", false);
        Supervisor e5 = new Supervisor(MemberJob.Supervisor, "Name5", false);
        employees.Add(e1);
        employees.Add(e2);
        employees.Add(e3);
        supervisors.Add(e4);
        supervisors.Add(e5);
    }


比如说,Name1忙于一个作业,在我第二次加载它之后,它显示得很好,然后当我第三次加载它时,它只显示TestData显示的内容


更新

结果是SaveData文件在第二次关闭时保存了默认值

从第一关开始的代码

Busy = true
EmployeeName = Name1
EmployeeWorkload = "Test"
ShiftsLeft = 2

第二关的代码

Busy = false
EmployeeName = "Name1"
EmployeeWorkload = null
ShiftsLeft = 0
问题就在这里

using (FileStream fs = new FileStream(FILENAME, FileMode.OpenOrCreate))
FileMode.OpenOrCreate
不会截断现有文件,因此最终会得到不正确的数据

使用
FileMode。改为创建
,根据

指定操作系统应创建新文件。如果文件已存在,则将覆盖该文件。Create相当于请求如果文件不存在,则使用CreateNew;否则,请使用Truncate

编辑:在表单中,您有以下字段定义

private List<Employee> employees; //create a generic list of employees
private List<Supervisor> supervisors;
问题就在这里

using (FileStream fs = new FileStream(FILENAME, FileMode.OpenOrCreate))
FileMode.OpenOrCreate
不会截断现有文件,因此最终会得到不正确的数据

使用
FileMode。改为创建
,根据

指定操作系统应创建新文件。如果文件已存在,则将覆盖该文件。Create相当于请求如果文件不存在,则使用CreateNew;否则,请使用Truncate

编辑:在表单中,您有以下字段定义

private List<Employee> employees; //create a generic list of employees
private List<Supervisor> supervisors;

我已将其更改为仅
文件模式error@DannyWatson在调试器下运行它,检查您得到的异常(如果有)。它发生在SaveData方法中,我在第一次保存后交叉检查它,它按预期保存,第二次保存,我检查了.dat文件,但只有默认值可以再次使用。在第二次运行时,在
SaveData
中放置一个断点,并查看
员工
主管
中的内容。另一件需要检查的事情-您的
文件名是否包含完整路径。恐怕我们无法帮助您发布一个完整的工作示例,表示我们可以运行的问题,并查看发生的情况。我已将其更改为仅
文件模式。创建
,但仍然保持不变error@DannyWatson在调试器下运行它并检查您得到的异常(如果有)。它发生在SaveData方法中,我在第一次保存后交叉检查了它,它按预期保存,第二次保存时,我检查了.dat文件,并且只有默认值再次保存。在第二次运行时,在
SaveData
中放置一个断点,并查看
员工
主管
中的内容。另一件需要检查的事情-您的
文件名是否包含完整路径。恐怕我们无法帮助您发布完整的工作示例,说明我们可以运行的问题,并查看发生的情况。
List<Employee> employees = ...
List<Supervisor> supervisors = 
employees = ...
supervisors = ...