打开一个磁带设备,用WriteFile向其写入一个4096大小的数据块,结果报参数错误(87),很是搞不懂错在哪里啊,请大侠指教!部分代码如下:
struct LabelArray
{
char CbArray[1024];
char VgArray[1024];
char VolArray[1024];
char ArcArray[1024];
};
struct Label
{
CommonBlock  ComBlk;  //结构体
VolumeGroup  VgInfo;
Volume VolInfo;
Archive ArcInfo;
};
LabelArray vha;
Label vh;
---------
给vh赋值
--------DWORD WriteCount;memcpy(vha.CbArray,&vh.ComBlk,sizeof(CommonBlock));
memcpy(vha.VgArray,&vh.VgInfo,sizeof(VolumeGroup));
memcpy(vha.VolArray,&vh.VolInfo,sizeof(Volume));
memcpy(vha.ArcArray,&vh.ArcInfo,sizeof(Archive));
if(!WriteFile(hTape,&vha,4096,&WriteCount,NULL))
{
    cout<<"Write header to tape failed !Errno: "<<GetLastError()<<endl;
    return -1;
}
 hTape 为一个确定打开了的句柄.

解决方案 »

  1.   

    请大侠详细指点哪个参数不正确啊?我感觉唯一可能的就是vha,可是不明白为什么会出错另:在大企业里面的数据存储设备一般都是磁带库的,容量大而且方便归档。
      

  2.   

    写本地硬盘没问题。我写了一个测试程序,代码如下:
    string str="it is a test,test tape "; HANDLE hDisk;
    hDisk=CreateFile("c:\\temp.txt",          
    GENERIC_READ|GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,    // 打开已有的文件.
    0,
    NULL); if(hDisk==INVALID_HANDLE_VALUE)
    {
    cout<<"Can not open file "<<GetLastError()<<endl;
    return -1;
    } DWORD wc;
    if(!WriteFile(hDisk,str.c_str(),str.length(),&wc,NULL))
    {
    cout<<"Can not Write file "<<GetLastError()<<endl;
    return -1;
    }
    cout<<"Write finished !"<<endl;所以我觉得唯一可能出错的就是那个vha,可是我又实在找不出具体错在什么地方,请大侠们帮帮忙啊。非常感谢!