gpt4 book ai didi

C#读取文件

转载 作者:行者123 更新时间:2023-11-30 15:06:27 26 4
gpt4 key购买 nike

我有两个函数:

    public void SaveMap()
{
StreamWriter stream = new StreamWriter("file.txt");
for (int j = 0; j < GameConstants.MapMaxTilesX; j++)
{
for (int i = 0; i < GameConstants.MapMaxTilesY; i++)
{
stream.Write( map[j,i] );
}
}
stream.Close();
}

public void LoadMap()
{
StreamReader stream = new StreamReader("file.txt");
for (int j = 0; j < GameConstants.MapMaxTilesX; j++)
{
for (int i = 0; i < GameConstants.MapMaxTilesY; i++)
{
map[j, i] = (int)stream.Read();
}
}
stream.Close();
}

当它正确保存数据时,它不会读取数据。正在读取随机值(至少不是文件中的值)

我做错了什么?

最佳答案

即使 StreamReader.Read() 方法返回一个 int,它也不会从文件中读取一个 int。相反,它返回一个字符。类型是 int 的原因是它可以用 -1 标记文件结束条件。这是旧 C 做事风格的遗留问题。

如果您想从文件中读取字符,您可以调用 Read() 并根据 -1 测试返回值。如果返回 -1 以外的值,则将其转换为 char。然后你将负责以有意义的方式将角色组合在一起。但是有更简单的方法来完成您想要完成的事情!

要执行您想执行的操作,您必须以某种方式分隔整数值,然后解析文件中的字符串,或者改用 BinaryWriter/BinaryReader。

也许最简单的方法是像这样每行放置一个值:

...
stream.WriteLine( map[j,i] );
...
map[j, i] = int.Parse(stream.ReadLine());

如果您想最小化文件大小,那么我建议使用 BinaryWriter 写入每个 int,然后使用 BinaryReader.ReadInt32() 方法读取值。如果你这样做,那么文件将正好是 4 * GameConstants.MapMaxTilesX * GameConstants.MapMaxTilesY 字节长。

另一种有趣的方法是将 map 的每一行都写在自己的行上,并用制表符 '\t' 分隔每一列。然后,您可以一次读回一行值,并使用 string.Split 分隔每行的值。这种方法的优点是您可以在电子表格程序或文本编辑器中编辑文件。

关于C#读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7842612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com