gpt4 book ai didi

C# 从二进制文件读取两个日期时出错

转载 作者:行者123 更新时间:2023-12-02 01:18:44 24 4
gpt4 key购买 nike

从二进制文件读取两个日期时,我看到以下错误:

“输出字符缓冲区太小,无法容纳解码的字符,编码‘Unicode (UTF-8)’后备‘System.Text.DecoderReplacementFallback’。参数名称:chars”

我的代码如下:

static DateTime[] ReadDates()
{
System.IO.FileStream appData = new System.IO.FileStream(
appDataFile, System.IO.FileMode.Open, System.IO.FileAccess.Read);

List<DateTime> result = new List<DateTime>();
using (System.IO.BinaryReader br = new System.IO.BinaryReader(appData))
{
while (br.PeekChar() > 0)
{
result.Add(new DateTime(br.ReadInt64()));
}
br.Close();
}
return result.ToArray();
}

static void WriteDates(IEnumerable<DateTime> dates)
{
System.IO.FileStream appData = new System.IO.FileStream(
appDataFile, System.IO.FileMode.Create, System.IO.FileAccess.Write);

List<DateTime> result = new List<DateTime>();
using (System.IO.BinaryWriter bw = new System.IO.BinaryWriter(appData))
{
foreach (DateTime date in dates)
bw.Write(date.Ticks);
bw.Close();
}
}

可能是什么原因?谢谢

最佳答案

问题是您正在使用 PeekChar - 它试图将二进制数据解码为UTF-8字符。不幸的是,我在 BinaryReader 中看不到任何其他允许您检测流结束的内容。

可以继续调用ReadInt64,直到它抛出EndOfStreamException,但这非常可怕。唔。您可以调用 ReadBytes(8),然后调用 BitConverter.ToInt64 - 这将允许您在 ReadBytes 返回小于任何值的字节数组时停止8 个字节...不过这不太好。

顺便说一下,您不需要显式调用 Close,因为您已经在使用 using 语句。 (这对读者和作者都适用。)

关于C# 从二进制文件读取两个日期时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855878/

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