为什么我使用的每个程序的磁带备份维度都会发生变化

本文关键字:备份 变化 磁带 程序 为什么 | 更新日期: 2023-09-27 17:59:38

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

这样做效果很好,但在磁带上写入的数据比原始文件数据多得多。

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

如果我从磁带上读取刚刚写入的原始数据,我会得到一个大约170mb的文件(witch是可以接受的),并且备份的文件总是工作得很好。

我尝试过其他程序,Microsoft NTBackup在启用压缩的情况下仅使用170mb(!!),其他商业和免费程序使用200到300mb

但是所有程序都可以正确读取备份(恢复文件上的相同md5和sha1!)

发生了什么事?如何改进我的应用程序?我真的不明白。

我添加了我的"write"函数,他在类中使用修改后的write(只有当你写一个文件时,这才有效):

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();
}

为什么我使用的每个程序的磁带备份维度都会发生变化

我认为磁带的块大小大于BUFFER_size。你并没有一直把胶带填满。