- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设我想操作软盘驱动器或 USB 读卡器上的一些文件。如何检查有问题的驱动器是否准备就绪? (即物理插入磁盘。)
驱动器盘符存在,因此在这种情况下 os.exists() 将始终返回 True。此外,在这个过程中,我还不知道任何文件名,因此检查给定文件是否存在也不起作用。
一些澄清:这里的问题是异常处理。大多数有问题的 win32 API 调用只是在您尝试访问未就绪的驱动器时抛出异常。通常,这会很好地工作 - 寻找类似可用空间的东西,然后捕获引发的异常并假设这意味着不存在磁盘。然而,即使我捕捉到所有异常,我仍然会收到来自 Windows 的异常对话框,告诉我软盘/读卡器尚未准备好。所以,我想真正的问题是 - 如何抑制 Windows 错误框?
最佳答案
和很多事情一样,答案就在 an article about C++/Win32 programming from a decade ago 中。 .
简而言之,问题是 Windows 处理软盘错误的方式与处理其他类型的驱动器错误的方式略有不同。默认情况下,无论您的程序做什么,或者认为它在做什么,Windows 都会拦截设备抛出的任何错误并向用户显示一个对话框而不是让程序处理它 - 确切的问题我有。
但是,事实证明,有一个 Win32 API 调用可以解决这个问题,主要是 SetErrorMode()
简而言之(我在这里用手挥动了很多细节),我们可以使用 SetErrorMode()
让 Windows 不再那么偏执,做我们的事情,让程序处理这种情况,然后将 Windows 错误模式重置为之前的状态,就好像我们从未到过那里一样。 (这里可能有一个 Keyser Soze 的笑话,但我今天摄入的咖啡因量不对,所以才找到它。)
改编链接文章中的 C++ 示例代码,大致如下所示:
int OldMode; //a place to store the old error mode
//save the old error mode and set the new mode to let us do the work:
OldMode = SetErrorMode(SEM_FAILCRITICALERRORS);
// Do whatever we need to do that might cause an error
SetErrorMode(OldMode); //put things back the way they were
在 C++ 下,以正确的方式检测错误需要 `GetLastError()' 函数,幸运的是我们在这里不需要担心,因为这是一个 Python 问题。在我们的例子中,Python 的异常处理工作正常。那么,这就是我拼凑起来检查驱动器号是否“准备就绪”的功能,如果其他人需要它,就可以复制粘贴了:
import win32api
def testDrive( currentLetter ):
"""
Tests a given drive letter to see if the drive is question is ready for
access. This is to handle things like floppy drives and USB card readers
which have to have physical media inserted in order to be accessed.
Returns true if the drive is ready, false if not.
"""
returnValue = False
#This prevents Windows from showing an error to the user, and allows python
#to handle the exception on its own.
oldError = win32api.SetErrorMode( 1 ) #note that SEM_FAILCRITICALERRORS = 1
try:
freeSpace = win32file.GetDiskFreeSpaceEx( letter )
except:
returnValue = False
else:
returnValue = True
#restore the Windows error handling state to whatever it was before we
#started messing with it:
win32api.SetErrorMode( oldError )
return returnValue
最近几天我一直在使用它,它在软盘和 USB 读卡器上运行良好。
一些注意事项:几乎所有需要磁盘访问的函数都可以在 try block 中运行 - 我们正在寻找由于媒体不存在而导致的异常。
此外,虽然 python win32api
包公开了我们需要的所有函数,但它似乎没有任何标志常量。在访问了 MSDN 的古老内部之后,发现 SEM_FAILCRITICALERRORS 等于 1,这让我们的生活变得非常轻松。
我希望这能帮助遇到类似问题的其他人!
关于python - 如何检查磁盘是否在使用 python 的驱动器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/851010/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!