я пишу небольшое приложение писателя ленты в C#, используя класс, содержащийся в этой статье: http://www.codeproject.com/Articles/15487/Magnetic-Tape-Data-Storage-Part-1-Tape-Drive-IO-CoЗачем изменять размер архива для каждой программы, которую я использую?
это работает очень хорошо, но пишет много больше данных на магнитной ленте, чем исходные данные файла.
Оценка: Мой тестовый файл - 160mb. Запись в ленте приводит к занятию около 300 мб. , обеспечивающий сжатие оборудования, занимает около 250 МБ.
Если я прочитал только что написал необработанные данные с ленты, я получу около 170 Мб файла (ведьма приемлема), и резервный файл всегда работает хорошо.
Я попытался с другими программами, Microsoft NTBackup использует только 170MB (!!) со сжатием включена, другие коммерческие и бесплатные программы использует от 200 до 300Mb
Но все программы могут читать правильно подпорку (то же самое и md5 sha1 на восстановленном файле!)
Что происходит? как я могу улучшить свое приложение? я действительно не могу этого понять.
я добавить свою функцию «запись», который использует Modded запись в классе (это работает только, если вы пишете один файл):
private void Write(string path)
{
int BlockCounter = 0;
int BytesRead = 0;
Byte[] Temp = new Byte[BUFFER_SIZE];
using (System.IO.FileStream InputStream = System.IO.File.OpenRead(path))
{
TapeOperator TapeOp = new TapeOperator();
TapeOp.Load("\\\\.\\Tape0", 0);
TapeOp.SetTapePosition(0);
BytesRead = InputStream.Read(Temp, 0, BUFFER_SIZE);
while (BytesRead > 0)
{
TapeOp.Write(BlockCounter, Temp);
BlockCounter++;
BytesRead = InputStream.Read(Temp, 0, BUFFER_SIZE);
}
TapeOp.TapeMark(1, 1, 1); //TapeMark is a custom function to write a FileMark
BlockCounter++;
TapeOp.Close();
}
}
Modded записи из класса:
public void Write(long startPos, byte[] stream)
{
m_stream.Write(stream, 0, stream.Length);
m_stream.Flush();
}
Добавьте это как комментарий, а не как ответ. – InnocentKiller
В этом тесте я использовал один файл размером 160 Мбайт, поэтому размер блока не может помочь! Спасибо, в любом случае :) Похоже, что последнее измерение связано с количеством ошибок записи на магнитной ленте, и есть какой-то способ уменьшить этот номер ошибки со стороны программного обеспечения (например, Microsoft NTBackup). – HypeZ