【问题标题】:File doesn't update when writing to it using System.IO.Stream C#使用 System.IO.Stream C# 写入文件时文件不更新
【发布时间】:2018-10-29 19:45:01
【问题描述】:

我正在使用以下代码将长度byte[] val写入文件末尾,然后写入byte[] val本身

byte[] len = BitConverter.GetBytes((UInt16) val.Length);
int fileLen = (int)new FileInfo(filePath).Length;
using (Stream stream = File.OpenWrite(filePath))
{
    stream.Write(len, fileLen, 2);
    stream.Write(val, fileLen + 2, val.Length);
}

我在using 块的最后一行收到此错误:

偏移量和长度超出数组的范围或计数更大 比从索引到源末尾的元素数 收藏。

当我检查文件时,我发现流根本没有写入前 2 个字节,这就是发生错误的原因。为什么会这样?

【问题讨论】:

    标签: c# .net stream runtime-error filestream


    【解决方案1】:

    异常的原因是您提供了一个不应该的偏移量,正如异常消息所述。

    对于任何大于零的文件长度,第一个 Write() 已经抛出,因为偏移量加上长度将超出 len 的边界。

    offset参数表示字节数组中的偏移量,在这两种情况下都应该为零,因为你要写入整个数组:

    stream.Write(len, 0, len.Length);
    stream.Write(val, 0, val.Length);
    

    如果您想追加到文件的末尾,请参阅Append data to existing file in C#。如果您想在其他任何地方开始写入,请使用Seek() 更改流的位置。

    【讨论】:

    • ohhh,我还以为是文件中的偏移量,那我怎么改文件中的偏移量呢?
    • 查看更新后的答案。使用new FileStream(filePath, FileMode.Append, FileAccess.Write)Seek() 到想要的位置。
    • 是的,Seek() 就是我要找的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2021-09-17
    • 1970-01-01
    • 2019-09-13
    • 2018-08-24
    • 2011-08-19
    相关资源
    最近更新 更多