我已经用 C++ 编写了一个代码来在其默认应用程序中打开一个文件,就像.doc
在 MS-Word 中一样,现在我想计算在其应用程序中打开文件的时间。
为此,我需要知道加载到该应用程序中的文件百分比。但从过去 7 天开始,我找不到任何合适的解决方案。那么任何人都可以帮助我解决这个问题吗?
如果我使用的是 Windows,那么 Windows 任务管理器可以帮助我做到这一点吗?
你试图做的不仅不可能,甚至没有意义。
当您在 WMP 中播放 MP3 时,它不会将整个文件加载到内存中。相反,它一次将一小部分文件映射到内存中,这样它就可以在播放 MP3 时动态解码它。(我想如果你一直播放这首歌,没有停止或跳过或快进或倒带,它最终会读取文件的每个字节,可能在歌曲结束前几秒钟完成,但我怀疑这就是你'正在寻找。)
同样,Word 不会将任何整个 .doc 文件读入内存(除非它非常小)。这就是它能够在不使用大量内存的情况下编辑巨大文件的方式。(同样,如果你翻阅整个文件,它可能最终会读取每个字节——就此而言,它最终可能会将足够多的文件复制到自动保存的备份文件中,不再需要查看原始文件——但同样,我怀疑这就是你要找的东西。)
如果您只关心某些特定的应用程序,并且这些应用程序具有 COM 自动化接口(如 WMP 和 Word 一样),它们可能有方法或事件会在它们完成“加载”文件时告诉您(意味着它们'已经阅读了足够多的内容以开始播放/显示/等),或者当他们“完成”文件时(意味着移至下一首曲目或其他任何内容),但对此没有通用答案;不同的应用程序会有不同的自动化接口。(而且,作为旁注,你真的不想从 C++ 进行 COM 自动化,除非你真的必须这样做;使用 jscript、vbscript 或你最喜欢的 .NET 语言要容易得多……)
如果第三方进程没有发出信号表明它已经加载了某些东西,例如,通过某个输出流,一种方法是查看进程打开和关闭的文件句柄。我认为这将类似于 Process Explorer 之类的“任务管理器”能够查看进程的文件句柄。但是,如果进程在“加载”完成后没有关闭文件句柄,那么您将无法获得准确的时间。此外,您将无法获得已加载数据量的“实时”百分比。