【发布时间】:2015-07-09 17:01:10
【问题描述】:
下面是Java代码。
HANDLE h = kernel32.CreateFile("\\\\.\\d:",
kernel32.GENERIC_READ
| kernel32.GENERIC_WRITE,
0, null, kernel32.OPEN_EXISTING,
0, null);
IntByReference nbread = new IntByReference();
ByteBuffer b = ByteBuffer.allocate(48);
boolean result = kernel32.ReadFile(h, b, b.capacity(), nbread, null);
System.out.println(kernel32.GetLastError());
它给出了错误87 (Invalid parameter)
可能是什么问题?
【问题讨论】:
-
第 87 行是哪一行?
-
无效参数很可能是第一个参数。如果您尝试打开
D:驱动器的根目录,请改用"D:/",并在 that 调用之后检查错误代码。您还应该确保 48 字节足以读取您正在阅读的任何文件的内容。 -
调用
GetLastError()是无效的,除非您确实遇到了错误,并且这里没有证据表明您这样做了。 -
@technomage:
"\\\\.\\d:"是CreateFile()的完全有效的路径字符串:"打开卷或可移动媒体驱动器(例如,软盘驱动器或闪存拇指驱动器)时),lpFileName 字符串应为以下形式:"\\.\X:"。不要使用尾部反斜杠 (),它表示驱动器的根目录。"更有可能发生的是CreateFile()失败并且无效的HANDLE被传递给ReadFile()。假设ReadFile()甚至首先失败(根据 EJP 的评论),因为此代码中没有错误检查。