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

C# 为什么我使用的每个程序的磁带备份维度都会发生变化?,c#,backup,C#,Backup,我正在用C#编写一个小型磁带编写器应用程序,使用本文中包含的类: 这工作得很好,但在磁带上写入的数据比原始文件数据多得多 实例: 我的测试文件是160mb。 在磁带中写入会占用大约300mb的空间。 启用硬件压缩大约需要250mb 如果我从磁带读取刚写入的原始数据,我会得到一个大约170mb的文件(可以接受),备份的文件总是运行良好 我试过使用其他程序,Microsoft NTBackup仅使用170mb(!!),支持压缩,其他商业和免费程序使用200到300mb 但所有程序都可以正确读取备份

我正在用C#编写一个小型磁带编写器应用程序,使用本文中包含的类:

这工作得很好,但在磁带上写入的数据比原始文件数据多得多

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

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

我试过使用其他程序,Microsoft NTBackup仅使用170mb(!!),支持压缩,其他商业和免费程序使用200到300mb

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

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

我添加了我的“write”函数,该函数在类中使用修改过的write(这仅在编写单个文件时有效):

从类中修改写入:

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

我的看法是,磁带的块大小大于缓冲区大小。您没有一直填充磁带块。

将此添加为注释,而不是答案。在该测试中,我使用的是一个160mb的文件,因此块大小没有帮助!无论如何,谢谢:)看起来最后一个维度与磁带写入错误的数量有关,并且有某种方法可以在软件方面减少此错误数量(就像Microsoft NTBackup那样..)
public void Write(long startPos, byte[] stream)
{
    m_stream.Write(stream, 0, stream.Length);
    m_stream.Flush();
}