如何在c#中的特定位置写入数据?

如何在c#中的特定位置写入数据?,c#,file,C#,File,我正在申请c#。在该应用程序中,我有一个字节数组,我想将该字节数组数据写入特定位置 这里我使用了以下逻辑 using(StreamWriter writer=new StreamWriter(@"D:\"+ FileName + ".txt",true)) { writer.WriteLine(Encoding.ASCII.GetString(Data),IndexInFile,Data.Length); } 但每当我在文件中写入数据时,它都会从头开始写入 我的条件是,假设在初

我正在申请c#。在该应用程序中,我有一个字节数组,我想将该字节数组数据写入特定位置

这里我使用了以下逻辑

using(StreamWriter writer=new StreamWriter(@"D:\"+ FileName + ".txt",true))  
{  
    writer.WriteLine(Encoding.ASCII.GetString(Data),IndexInFile,Data.Length);
}
但每当我在文件中写入数据时,它都会从头开始写入


我的条件是,假设在初始阶段,我有一个空文件,我想从位置10000开始在文件中写入。请帮助我。提前谢谢。

可能有点不太成熟,但您可以访问
StreamWriter
BaseStream
属性,并在其上使用
Seek(长偏移量,请参见Korigin origin)
。(但请注意,并不是每个流都可以使用
Seek

您可以这样设置流中的位置:

writer.BaseStream.Seek( 1000, SeekOrigin.Begin);
在您的
WriteLine
代码之前添加此项


请注意,我没有包含任何代码来检查文件中是否有至少1000个字符作为开始。

您使用的
WriteLine
重载是:

特别是提供的
IndexInFile
参数实际上是缓冲区中的索引,从中开始读取而不是开始写入的文件中的索引-这解释了为什么要在文件的开头而不是在
IndexInFile
处写入


您应该获得对底层流的访问权,并首先搜索文件中所需的位置,然后写入文件。

切勿像您这样尝试将二进制数据写入字符串。它不能正常工作。将二进制数据作为二进制数据写入。您可以使用
Stream
而不是
StreamWriter

using (Stream stream = new FileStream(fileName, FileMode.OpenOrCreate))
{
    stream.Seek(1000, SeekOrigin.Begin);
    stream.Write(Data, 0, Data.Length);
}

我认为即使文件不够大,
Seek()
也可以正常工作。它用零字节填充缺少的部分。我使用了它,但得到的错误是System.IO.IOException:无法向后搜索以覆盖以前在附加模式下打开的文件中存在的数据。在System.IO.FileStream.Seek(Int64 offset,SeekOrigin origin)中,则不使用
FileMode.Append
。但我想追加数据。然后我将做什么?您只能在文件末尾追加。你不能在中间加上。是的,这个代码有效。除了stream.Seek(),您还可以设置stream.Position=value。我得到的错误是“System.IO.IOException:无法反向搜索以覆盖以前在追加模式下打开的文件中存在的数据”。在System.IO.FileStream.Seek(Int64偏移量,请参见原始码)'