我绝不是程序员,但目前想知道应用程序是否创建了一个 Windows 命名的临时文件。例如,它创建的文件是 tmp001,有没有办法我可以取该名称 tmp001 并要求 Windows 在创建它之前给我它将创建的下一个临时文件。
谢谢,
麦克风
没有直接的方法可以了解下一个要创建的临时文件名。
例如,程序员使用该System.IO.Path.GetTempFileName
方法,但可以添加特定于应用程序的前缀或后缀,以使应用程序更容易找到其新创建的文件。
甚至可以选择将此临时文件保存在系统 Temp 文件夹之外的其他位置。
通常应用程序使用 Win32 API GetTempFileName来获取临时目录。那里描述了如何生成临时文件的过程。
我不确定您为什么需要此信息,但也许您可以例如通过 Win32 API(如ReadDirectoryChangesW)或使用迷你过滤器驱动程序注册目录更改。
您需要更明确地定义一个“临时文件”才能用“是”回答这个问题。问题是“临时文件”只是不应该保留的东西。它可以存在于系统上的任何位置,并由用户、应用程序或服务创建。这将使您几乎(或实际上)不可能用“是”回答您的问题。
如果您将临时文件的定义限制为仅在官方临时文件夹(或子文件夹)中的文件,如果您试图捕获不是由 windows 生成的名称,您仍然会遇到问题。任何应用程序都可以在该文件夹中生成一个特别命名的临时文件,而无需 Windows 关心。
如果您进一步将定义限制为仅由 Windows 命名的那些文件,您可能会有所收获。但是,这真的满足您的需求吗?
毕竟,也许最好描述一下您要解决的问题。可能有一个更好(可行)的解决方案可以解决这个问题。
这种代码不能在多任务操作系统上可靠地工作。另一个进程中的另一个线程可能会抢占您的线程并声明您希望创建的文件名。
这很容易解决,只需命名您自己的文件,而不是依赖 Windows 为您做。在 AppData 文件夹中执行此操作,这样您就可以最大限度地降低另一个进程将其弄乱的风险。