我正在c#中创建一个应用程序。在那个应用程序中,我有一个字节数组,我想将该字节数组数据写入特定位置。
这里我使用了以下逻辑。
using(StreamWriter writer=new StreamWriter(@"D:\"+ FileName + ".txt",true))
{
writer.WriteLine(Encoding.ASCII.GetString(Data),IndexInFile,Data.Length);
}
但无论何时我在文件中写入数据,它都会从开始写入。
我的条件是假设在初始我有空文件,我想从10000位开始写入文件。请帮助我。谢谢。
答案 0 :(得分:11)
永远不要像你一样尝试将二进制数据写为字符串。它无法正常工作。将二进制数据写为二进制数据。您可以使用Stream
代替StreamWriter
。
using (Stream stream = new FileStream(fileName, FileMode.OpenOrCreate))
{
stream.Seek(1000, SeekOrigin.Begin);
stream.Write(Data, 0, Data.Length);
}
答案 1 :(得分:3)
您可以像这样设置流中的位置:
writer.BaseStream.Seek( 1000, SeekOrigin.Begin);
在WriteLine
代码之前添加此内容。
请注意,我没有包含任何代码来检查文件中是否至少有1000个字符。
答案 2 :(得分:1)
可能有点hacky,但您可以访问BaseStream
的{{1}}属性并在其上使用StreamWriter
。 (但请注意,因为并非每个流都可以使用Seek(long offset, SeekOrigin origin)
。)
答案 3 :(得分:1)
您使用的WriteLine
重载就是这个:
TextWriter.WriteLine Method (Char[], Int32, Int32)
特别是提供的IndexInFile
参数实际上是缓冲区中的索引,从中开始读取而不是文件中开始写入的索引 - 这解释了为什么你在文件的开头写的不是IndexInFile
所期望的。
您应首先获取对基础Stream和Seek
的访问权限,然后写入文件中的所需位置。