Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write data at a particular position in c#?

Tags:

c#

file

I am making an application in c#. In that application I have one byte array and I want to write that byte array data to particular position.

Here i used the following logic.

using(StreamWriter writer=new StreamWriter(@"D:\"+ FileName + ".txt",true))  
{  
    writer.WriteLine(Encoding.ASCII.GetString(Data),IndexInFile,Data.Length);
}

But whenever i am writing data in file, it starts writing from starting.

My condition is that suppose at the initial I have empty file and I want to start writing in file from position 10000. Please help me .Thanks in advance.

like image 369
Dany Avatar asked Nov 23 '11 13:11

Dany


2 Answers

The WriteLine overload you are using is this one:

TextWriter.WriteLine Method (Char[], Int32, Int32)

In particular the IndexInFile argument supplied is actually the index in the buffer from which to begin reading not the index in the file at which to begin writing - this explains why you are writing at the start of the file not at IndexInFile as you expect.

You should obtain access to the underlying Stream and Seek to the desired position in the file first and then write to the file.

like image 103
Justin Avatar answered Sep 28 '22 14:09

Justin


Never try to write binary data as strings, like you do. It won't work correctly. Write binary data as binary data. You can use Stream for that instead of StreamWriter.

using (Stream stream = new FileStream(fileName, FileMode.OpenOrCreate))
{
    stream.Seek(1000, SeekOrigin.Begin);
    stream.Write(Data, 0, Data.Length);
}
like image 30
svick Avatar answered Sep 28 '22 14:09

svick