我正在使用本文中包含的类在 C# 中编写一个小磁带写入器应用程序:http: //www.codeproject.com/Articles/15487/Magnetic-Tape-Data-Storage-Part-1-Tape-Drive-IO -钴
这很好用,但在磁带上写入的数据比原始文件数据多得多。
实际示例:我的测试文件为 160mb。写入磁带会占用大约 300mb 的空间。启用硬件压缩大约需要 250mb。
如果我从磁带读取刚刚写入的原始数据,我会得到一个大约 170mb 的文件(可以接受 witch),并且备份的文件总是运行良好。
我尝试使用其他程序,Microsoft NTBackup 仅使用 170mb (!!) 启用压缩,其他商业和免费程序使用 200 到 300mb
但是所有程序都可以正确读取备份(恢复文件上的 md5 和 sha1 相同!)
这是怎么回事?如何改进我的应用程序?我真的无法理解这一点。
我添加了我的“写入”函数,该函数在类中使用了修改后的写入(仅当您编写单个文件时才有效):
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();
}