Затирание файла с использованием FileStream - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет ! Есть такая open source прога - eraser, она позволяет затирать файлы, т.е. перезаписывать кластеры файла какими нибудь рандомными данными. Так вот, она это делает с помощью потоков FileStream, насколько я понял. Собственно вопрос,

как это ей удается ??

Когда я пробую перезаписать файл, то информация пишется в другие кластеры, а на кластерах, где был файл, вся информация остается Нашел функцию, которая удаляет файл в eraser - находится в method.cs, опять же, если я правильно все понял
public override void Erase(Stream stream, long erasureLength, Prng prng,
            ErasureMethodProgressFunction callback)
        {
            //Randomize the order of the passes
            ErasureMethodPass[] randomizedPasses = PassesSet;
            if (RandomizePasses)
                randomizedPasses = ShufflePasses(randomizedPasses);
 
            //Remember the starting position of the stream.
            long strmStart = stream.Position;
            long strmLength = Math.Min(stream.Length - strmStart, erasureLength);
            long totalData = CalculateEraseDataSize(null, strmLength);
 
            //Allocate memory for a buffer holding data for the pass.
            byte[] buffer = new byte[Math.Min(DiskOperationUnit, strmLength)];
 
            //Run every pass!
            for (int pass = 0; pass < Passes; ++pass)
            {
                //Do a progress callback first.
                if (callback != null)
                    callback(0, totalData, pass + 1);
 
                //Start from the beginning again
                stream.Seek(strmStart, SeekOrigin.Begin);
 
                //Write the buffer to disk.
                long toWrite = strmLength;
                int dataStopped = buffer.Length;
                while (toWrite > 0)
                {
                    //Calculate how much of the buffer to write to disk.
                    int amount = (int)Math.Min(toWrite, buffer.Length - dataStopped);
 
                    //If we have no data left, get more!
                    if (amount == 0)
                    {
                        randomizedPasses[pass].Execute(buffer, prng);
                        dataStopped = 0;
                        continue;
                    }
 
                    //Write the data.
                    stream.Write(buffer, dataStopped, amount);
                    stream.Flush();
                    toWrite -= amount;
 
                    //Do a progress callback.
                    if (callback != null)
                        callback(amount, totalData, pass + 1);
                }
            }
}

Решение задачи: «Затирание файла с использованием FileStream»

textual
Листинг программы
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write, FileShare.None, 8, FileOptions.WriteThrough);

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы