为什么磁带备份维度更改我使用的每个程序?

时间:2013-02-14 16:48:25

标签: c# backup

我正在使用本文中包含的类在C#中编写一个小型磁带编写器应用程序: http://www.codeproject.com/Articles/15487/Magnetic-Tape-Data-Storage-Part-1-Tape-Drive-IO-Co

这非常有效,但在磁带上写入的数据比原始文件数据多得多。

实际例子: 我的测试文件是160mb。 用磁带写入会占用大约300mb的空间。 启用硬件压缩需要大约250mb。

如果我从磁带中读取刚刚写入的原始数据,我会得到一个大约170mb的文件(可以接受),备份文件总是运行良好。

我试过其他程序,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();
    }            

}

从类中修改写入:

public void Write(long startPos, byte[] stream)
{
    m_stream.Write(stream, 0, stream.Length);
    m_stream.Flush();
}

1 个答案:

答案 0 :(得分:0)

我对它的看法是磁带的块大小大于你的BUFFER_SIZE。你没有完全填满磁带块。