C# 文件不存在';t使用System.IO.Stream C写入时更新#
我使用以下代码将长度C# 文件不存在';t使用System.IO.Stream C写入时更新#,c#,.net,stream,runtime-error,filestream,C#,.net,Stream,Runtime Error,Filestream,我使用以下代码将长度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.Writ
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);
}
我使用块在的最后一行得到这个错误:
偏移量和长度超出了数组的界限或计数更大
大于从索引到源结尾的元素数
收藏
当我检查文件时,我看到流根本没有写入前2个字节,这就是发生错误的原因。为什么会发生这种情况?出现异常的原因是,正如异常消息所述,您提供了一个不应该提供的偏移量
对于任何大于零的文件长度,第一个Write()
将已经抛出,因为偏移量加上长度将位于len
的边界之外
offset参数表示字节数组中的偏移量,在这两种情况下都应为零,因为您要写入整个数组:
stream.Write(len, 0, len.Length);
stream.Write(val, 0, val.Length);
如果要附加到文件末尾,请参见。如果要在其他任何地方开始写入,请使用Seek()
更改流的位置。出现异常的原因是,按照异常消息的说明,您提供了一个不应该提供的偏移量
对于任何大于零的文件长度,第一个Write()
将已经抛出,因为偏移量加上长度将位于len
的边界之外
offset参数表示字节数组中的偏移量,在这两种情况下都应为零,因为您要写入整个数组:
stream.Write(len, 0, len.Length);
stream.Write(val, 0, val.Length);
如果要附加到文件末尾,请参见。如果您想在其他任何地方开始写入,请使用Seek()
更改流的位置。ohhh,我认为它是指文件中的偏移量,那么如何更改文件中的偏移量?请参阅更新的答案。使用newfilestream(filePath,FileMode.Append,FileAccess.Write)
或Seek()
到想要的位置。是的,Seek()
就是我想要的,谢谢!哦,我认为这意味着文件中的偏移量,那么我如何更改文件中的偏移量呢?请参阅更新的答案。使用newfilestream(filePath,FileMode.Append,FileAccess.Write)
或Seek()
到想要的位置。是的,Seek()
就是我想要的,谢谢!