Удалить первые n байт из файла - C#
Формулировка задачи:
Нужно из файла удалить первые n байт, а потом в начало файла записать некий массив байт partOfFile. При этом, partOfFile скорее всего не будет равен этому числу n.
Как это можно сделать?
Перезаписать файл - не вариант. Он большой. Нужно провести операцию именно в том файле, который указан.
Решение задачи: «Удалить первые n байт из файла»
textual
Листинг программы
static void FRead()
{
using (FileStream FS = new FileStream("file.bin", FileMode.Open))
using (BinaryReader BR = new BinaryReader(FS))
{
Console.Write("Файл:");
while (BR.PeekChar() >= 0)
{
int n = BR.ReadInt32();
Console.Write(n + " ");
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
Random rdm = new Random();
using (FileStream FS = new FileStream("file.bin", FileMode.Create))
using (BinaryWriter BW = new BinaryWriter(FS))
for (int i = 0; i < 10; i++)
{
int n = rdm.Next(100);
BW.Write(n);
}
FRead();
//
using (FileStream FS = new FileStream("file.bin", FileMode.Open))
using (BinaryWriter BW = new BinaryWriter(FS))
using (BinaryReader BR = new BinaryReader(FS))
{
int d = 3;
Console.WriteLine("Удалить {0} int", d);
int sz = sizeof(int);
long l = FS.Length;
long nw = l / sz - d;
for (int i = 0; i < nw; i++)
{
FS.Seek((d + i) * sz, SeekOrigin.Begin);
int n = BR.ReadInt32();
FS.Seek(i * sz, SeekOrigin.Begin);
BW.Write(n);
}
FS.SetLength(l - d * sz);
}
FRead();
//
using (FileStream FS = new FileStream("file.bin", FileMode.Open))
using (BinaryWriter BW = new BinaryWriter(FS))
using (BinaryReader BR = new BinaryReader(FS))
{
int d = 4;
Console.WriteLine("Вставить {0} int", d);
int sz = sizeof(int);
long l = FS.Length;
FS.SetLength(l + d * sz);
long nw = l / sz;
for (int i = 0; i < nw; i++)
{
FS.Seek(-(d + i + 1) * sz, SeekOrigin.End);
int n = BR.ReadInt32();
FS.Seek(-(i + 1) * sz, SeekOrigin.End);
BW.Write(n);
}
FS.Seek(0, SeekOrigin.Begin);
for (int i = 0; i < d; i++)
{
int n = rdm.Next(100);
BW.Write(n);
}
}
FRead();