У меня есть фрагмент кода, который должен иметь возможность модифицировать несколько байтов в конце файла. Проблема в том, что файлы огромны. До 100+ Гб.
Мне нужно, чтобы операция была как можно быстрее, но после нескольких часов Googeling, она выглядит как .Net здесь довольно ограничена.
В основном я пытаюсь использовать System.IO.FileStream и не знаю других методов. "Реверсивный" поток будет делать, но я знаю, как его создать (пишите с конца, а не из начала).
Вот что я делаю: (Примечание: время уходит при закрытии потока)
static void Main(string[] args)
{
//Simulate a large file
int size = 1000 * 1024 * 1024;
string filename = "blah.dat";
FileStream fs = new FileStream(filename, FileMode.Create);
fs.SetLength(size);
fs.Close();
//Modify the last byte
fs = new FileStream(filename, FileMode.Open);
//If I don't seek, the modification happens instantly
fs.Seek(-1, SeekOrigin.End);
fs.WriteByte(255);
//Now, since I am modifying the last byte,
//this last step is very slow
fs.Close();
}
}