Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件不存在';t使用System.IO.Stream C写入时更新#_C#_.net_Stream_Runtime Error_Filestream - Fatal编程技术网

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()
就是我想要的,谢谢!