尝试从DLT磁带恢复文件,有/同步问题

时间:2014-04-08 17:11:43

标签: c# synchronization backup

目前使用http://www.codeproject.com/Articles/15487/Magnetic-Tape-Data-Storage-Part-Tape-Drive-IO-Co

中的代码

让我们考虑以下代码:

public void Load(string tapeName)
    {
        // Try to open the file.
        m_handleValue = CreateFile(
            tapeName,
            GENERIC_READ,
            0,
            IntPtr.Zero,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_ARCHIVE | FILE_FLAG_BACKUP_SEMANTICS,
            IntPtr.Zero
            );

        if (m_handleValue.IsInvalid)
        {
            DisplayError();

            throw new TapeOperatorWin32Exception(
                "CreateFile", Marshal.GetLastWin32Error());
        }

        m_stream = new FileStream(
            m_handleValue,
            FileAccess.Read,
            32768,//65536,
            false
            );
    }

private void TestRead()
    {
        byte[] buffer = new byte[32768];
        m_stream.Read(buffer, 0, buffer.Length);
        m_stream.Flush();
    }

让我们称之为:

mTapeOperator.Load("\\\\.\\TAPE0");
mTapeOperator.TestRead();

我总是遇到以下异常:

  

句柄不支持同步操作。可能需要更改FileStream构造函数的参数以指示句柄是异步打开的(即,它是为重叠的I / O显式打开的。)

问题是,句柄是使用同步标志创建的,而FileStream是使用isAsync = false创建的。

完全相同的代码在我的C上随机文件中读取时工作正常:。

如果我使用BeginRead(异步)而不是Read(同步),在调用EndRead之前我没有异常。然后引发同样的异常。

0 个答案:

没有答案