当前,我可以在重新启动时删除一个目录。我目前通过使用MoveFileEx函数和传递MOVEFILE_DELAY_UNTIL_REBOOT常量来实现这一点。
我的问题是,我是否有以下问题:
目录1里面有目录2..。目录2是不固定的,这意味着需要删除目录1,但由于目录1中只有一个目录,这意味着我只需要删除目录1,而目录1又将删除目录2。但是,在我在重新启动时将目录1标记为要删除的目录1之后,另一个目录已经安装到目录1中,称为目录3。在这种情况下,应该删除目录2,因为我们不习惯删除目录3。
我想知道是否有任何条件变量/常量可以在这种情况下有所帮助?
发布于 2015-06-19 15:01:33
答案是,如果一个目录或文件没有被标记为要删除,那么它所在的目录就不会被删除。(正如IInspectable所指出的)
“只有当目录为空时,系统才会删除标记为MOVEFILE_DELAY_UNTIL_REBOOT标志的目录。”
发布于 2015-06-19 15:49:04
但是,在我在重新启动时将目录1标记为要删除之后,另一个目录已经安装到目录1中,称为目录3。在这种情况下,应该只删除目录2,因为我们不习惯删除目录3。
没有API来“取消”已标记为在重新启动时删除的文件/目录。您必须直接更新注册表以从列表中删除项。 documentation告诉您使用了哪个注册表键:
函数将重新启动时要重命名的文件的位置存储在以下注册表值中: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations 此注册表值为REG_MULTI_SZ类型。每个重命名操作存储下列以空结尾的字符串之一,具体取决于重命名是否为delete:
字符串szDstFile\0\0表示文件szDstFile将在重新启动时被删除。字符串szSrcFile\0szDstFile\0表示szSrcFile将在重新启动时被重命名为szDstFile。
另一方面,文件还说:
只有在MOVEFILE_DELAY_UNTIL_REBOOT标志为空的情况下,系统才删除标记为删除的目录。若要确保删除目录,请在尝试删除目录之前移动或删除目录中的所有文件。文件在启动时可能在目录中,但必须删除或移动它们,系统才能删除该目录。
但那只是提到文件,而不是子目录。
https://stackoverflow.com/questions/30939579
复制相似问题