我正在对 Windows 文件系统进行某种封装。
当用户请求打开一个文件时,windows 调用我的驱动程序来提供数据。在正常操作中,驱动程序返回缓存的文件内容,但是,在某些情况下,真正的文件没有被缓存,我需要从网络上下载它。
问题是,是否有可能让 Windows 继续尝试读取文件,而不阻止整个驱动器操作,既不阻止打开文件的软件,又让用户有机会取消打开过程。
起初,我尝试在数据可用之前阻止驱动程序,此解决方案实现起来更直接,但用户体验并不是最好的。而且,依赖网络传输不是一个好主意,传输可能会持续很多时间,而驱动程序将一直处于阻塞状态。
我实现的第二种方法是,当文件被缓存时以及文件不可用时仅返回数据,告诉 Windows 该文件的大小长度为 0,并在后台进程中下载文件。这样,驱动程序就不会阻塞窗口,用户体验得到改善,但用户需要打开N次文件,直到有数据可用。
我认为最好的解决方案是向 windows 返回一条消息,如“没有可用数据,5 秒后重试”,我认为如果驱动程序向 windows 返回适当的错误代码,这是可以实现的,但是错误列表太长,名称并不总是像您想要的那样具有描述性。
您有什么实现建议吗? 提前致谢。
最佳答案
您实现的行为对于驱动程序是正确的。处理慢速 I/O 的责任在更高层次。例如,Windows Explorer 非常小心,不试图从任何文件中检索甚至一个字节,完全依赖于元数据。
但是,当您很忙时,请不要返回失败代码。正是这种失败会迫使用户重复打开文件。
关于c++ - 让 Windows 尝试读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1587521/