C# 文件不会保存
本文关键字:保存 文件 | 更新日期: 2023-09-27 18:33:55
保存或读取文件,出了什么问题?
这将创建空文件。
我很困惑,请告诉我如何正确操作。如您所见,我正在尝试保存一个类,然后读回它们的数组。
public void savePlayers()
{
string path = @"scores.dat";
if (File.Exists(path))
{
File.Delete(path);
}
try
{
using (FileStream fs = File.Create(path))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, player.players);
fs.Close();
}
}
catch
{
MessageBox.Show("Failed to save data", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void readPlayers()
{
string path = @"scores.dat";
player.players.Clear();
try
{
using (FileStream fs = File.OpenRead(path))
{
BinaryFormatter formatter = new BinaryFormatter();
player.players.Add((Player)formatter.Deserialize(fs));
fs.Close();
}
}
catch
{
MessageBox.Show("Failed to read stats file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
您正在保存player.players
集合,并且正在尝试加载单个播放器(player.players.Add((Player)formatter.Deserialize(fs));
)。这是不正确的。
这取决于您必须在加载端(反序列化)或保存端(序列化)的位置解决此问题。
// Saving
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, player.players.Count); // or Count(), Length, depends on your list, collection,...
for each (Player pl in player.players)
{
formatter.Serialize(fs, pl);
}
fs.Close();
// Loading
BinaryFormatter formatter = new BinaryFormatter();
int count = (Int32) formatter.Deserialize(fs);
for (int i = 0; i < count; i++)
{
player.players.Add((Player)formatter.Deserialize(fs));
}
fs.Close();
并且Player
类必须标记为[Serializable]
,请检查它是否具有此属性。