我在测试的时候执行:
adb push d:/a.txt /sdcard/a.txt
adb pull /sdcard/a.txt d:/b.txt
结果提示我:
adb: error: cannot create file/directory
我们看adb
源码的报错位置:
if (stat(dst, &st) == -1) {
dst_exists = false;
// If we're only pulling one path, the destination path might point to
// a path that doesn't exist yet.
if (srcs.size() == 1 && errno == ENOENT) {
// However, its parent must exist.
struct stat parent_st;
if (stat(adb_dirname(dst).c_str(), &parent_st) == -1) {
sc.Error("cannot create file/directory '%s': %s", dst, strerror(errno));
return false;
}
} else {
sc.Error("failed to access '%s': %s", dst, strerror(errno));
return false;
}
}
从代码看,如果文件不存在就会检查文件的目录是否存在,都不存在就会报错。
当我新建了此文件后,问题就不存在了。但是,
目录是存在的啊,目录不就是D:\
, 换一种思路。我新建一个新的目录D:\testdir
,然后执行:
adb pull /sdcard/a.txt D:\testdir\b.txt
这样就 OK 了。
WHY? 难道是 adb_dirname 不支持 disk?
正当我迟疑不解的时候,我手欠把开发者设置的 USB 调试关掉后重新打开了。然后,问题竟然没有了,然后再也出现不了了。
知觉告诉我,「一切不容易复现的问题都将复现」,但问题就是木有复现,什么原因呢?
其实问题来源于我正在写的adb helper中的测试 出现的,每次执行python test\adb_test.py
都会复现这个问题。
为什么呢?
有人遇到过类似问题吗?