【发布时间】:2014-06-13 22:07:10
【问题描述】:
我的目标是读/写usb。
首先必须像“程序”一样打开并读取usb低级
我在 winAPI 中使用了 Visual c++
下面是我的测试代码
char path[64];
sprintf(path,"\\\\.\\%c:",volume);//
/////MOST case, user's input is F or G ......
HANDLE usb;
usb=CreateFile(TEXT(path),
GENERIC_ALL,//
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, //serail I/O
NULL);
if(usb==INVALID_HANDLE_VALUE) cout<<"fail to createfile()"<<endl;
cout<<usb<<endl;
char buf[128];
DWORD dwBytesRead=0;
ReadFile(usb,buf,sizeof(buf),&dwBytesRead,NULL);
cout<<buf<<endl;
cout<<GetLastError()<<endl;
CloseHandle(usb);
我想知道 CreateFile 是正确的和 ReadFile
ReadFile() 的 GetLastError() 是 87,这意味着 Invalid Input...
怎么了??
我多次引用MSDN...但是任何页面都不能解决这个问题....
我应该知道什么?修好吗?
【问题讨论】:
-
如果您已经知道出了问题,您应该只调用
GetLastError(检查来自ReadFile的返回值)。成功的操作不一定会改变上一个错误。 -
看到你的评论后,试着去做。但只有 ReadFile 的 GetLastError 返回 87..... 怎么了??
-
你确定只在
ReadFile返回FALSE时调用GetLastError()吗? -
是的,当我调用 CreateFile 时,只有 ReadFile 返回 87,GetLastError 返回 0
-
TEXT宏用于字符串 literals。由于它可以编译,我怀疑您没有选择 unicode(否则TEXT(path)将扩展为Lpath并且不存在);你真的应该。事实上,我相信像\\.\这样的特殊前缀只能在宽界面中使用。