Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何删除windows正在使用的文件?_Delphi_Delphi 7 - Fatal编程技术网

Delphi 如何删除windows正在使用的文件?

Delphi 如何删除windows正在使用的文件?,delphi,delphi-7,Delphi,Delphi 7,当windows中的任何程序或其他进程使用某个文件时,是否有任何方法可以删除该文件? 我通过两种方式搜索并发现了这一点: 1-在注册表中使用RunOnce键; 我不会使用这个,因为我不想等待windows重新启动或其他任何事情。。。我更喜欢准时做 2-使用本页声明的方式: 这里的问题是它在NT windows下很有用,我需要一种在所有窗口上都有效的方法 谢谢。尝试使用MOVEFILE\u DELAY\u UNTIL\u REBOOT标志。将推迟移动或删除操作,直到重新启动 编辑: 如果您不想重新

当windows中的任何程序或其他进程使用某个文件时,是否有任何方法可以删除该文件? 我通过两种方式搜索并发现了这一点:

1-在注册表中使用RunOnce键; 我不会使用这个,因为我不想等待windows重新启动或其他任何事情。。。我更喜欢准时做

2-使用本页声明的方式: 这里的问题是它在NT windows下很有用,我需要一种在所有窗口上都有效的方法

谢谢。

尝试使用MOVEFILE\u DELAY\u UNTIL\u REBOOT标志。将推迟移动或删除操作,直到重新启动

编辑: 如果您不想重新启动,唯一的选择就是关闭这些句柄。这样做,并一直有效,我没有看到任何进程崩溃。有关进程中枚举句柄的详细信息,请参见 . 但请注意,您应该枚举系统中的所有进程,并在Vista+上表现不同(您需要提升)

尝试使用MOVEFILE\u DELAY\u UNTIL\u REBOOT标志。将推迟移动或删除操作,直到重新启动

编辑: 如果您不想重新启动,唯一的选择就是关闭这些句柄。这样做,并一直有效,我没有看到任何进程崩溃。有关进程中枚举句柄的详细信息,请参见
. 但请注意,您应该枚举系统中的所有进程,并在Vista+上表现不同(您需要升级)

当有人使用某个文件时,您不能删除该文件。不管你怎么努力,windows都不会让你这么做。它可以处理某些文件,但通常不起作用。 当没有人使用该文件时,您可以尝试推迟删除。你可以:

1-使用RunOnce,但您不需要它。
2-在循环中等待,尝试删除文件。伪代码:

DeleteFile  
Check if you was able to delete or if file still exists.  
if you are able to delete, then exit loop.  

这是你能做的最好的了,也是我能记得的。

当有人在使用文件时,你不能删除它。不管你怎么努力,windows都不会让你这么做。它可以处理某些文件,但通常不起作用。 当没有人使用该文件时,您可以尝试推迟删除。你可以:

1-使用RunOnce,但您不需要它。
2-在循环中等待,尝试删除文件。伪代码:

DeleteFile  
Check if you was able to delete or if file still exists.  
if you are able to delete, then exit loop.  
这是你能做的最好的,也是我能记得的

这里的问题是它在NT windows下很有用,我需要一种在所有窗口上都有效的方法

所有现代桌面窗口(XP、Vista、7)也都是NT。你真的需要和NT合作吗 这里的问题是它在NT windows下很有用,我需要一种在所有窗口上都有效的方法


所有现代桌面窗口(XP、Vista、7)也都是NT。您真的需要使用NT吗您的文件很可能被锁定,因为某些进程对它们打开了一个句柄。这是删除或移动文件时导致拒绝访问的最常见原因

一个非常直截了当的方法是关闭把手

然后(你也可以下载源代码)可以为你做到这一点:我已经成功地使用了它

注意1:您需要管理权限才能使用它


注2:关闭另一进程的句柄被认为是非常粗鲁的行为,可能会使该进程不稳定。您的文件很可能被锁定,因为某些进程有一个句柄打开。这是删除或移动文件时导致拒绝访问的最常见原因

一个非常直截了当的方法是关闭把手

然后(你也可以下载源代码)可以为你做到这一点:我已经成功地使用了它

注意1:您需要管理权限才能使用它


注2:关闭另一进程的句柄被认为是非常粗鲁的,可能会使该进程不稳定。

您的选项2会等待重新启动。你真的想支持我吗?当其他文件处于打开状态时,无法删除该文件。你;如果你打开了一个文件,然后其他人在你完成之前删除了它,你会很失望。在当前正在使用的文件中,你可能想删除哪个文件?并且不能等到重新启动?注意:MoveFileEx(…MOVEFILE_DELAY_until_reboot)方法只有在用户具有管理员权限时才有效,否则if将返回ACCESS_denied选项2等待重新启动。你真的想支持我吗?当其他文件处于打开状态时,无法删除该文件。你;如果你打开了一个文件,然后其他人在你完成之前删除了它,你会很失望。在当前正在使用的文件中,你可能想删除哪个文件?并且不能等到重新启动吗?注意:MoveFileEx(…MOVEFILE\u DELAY\u until\u reboot)方法只有在用户具有管理员权限时才起作用,否则if将返回ACCESS\u Denied为什么人们不做任何解释就给出-1?我想知道我的答案有什么问题。为什么+1?使用此循环,您可以等待重新启动。OP需要行动,而不是天真的循环。所以这不是他能做的最好的。所以我投票支持这个解决方案,它不是一个简单的循环。他可以在函数中添加一个timout,这样他就不会永远陷入循环中。不久或稍后,打开文件的应用程序将关闭文件,循环将能够删除文件。此外,关闭其他应用程序句柄也不是一个好主意。任何时候你建议进行投票时,你都是在提供上下投票诱饵。我同意,在外国进程使用某些文件时杀死它们是不公平和危险的,但这就是问题所在;)为什么人们没有任何解释就给出-1?我想知道我的答案有什么问题。为什么+1?使用此循环,您可以等待重新启动。OP需要行动,而不是天真的循环。所以这不是他能做的最好的。所以我投票支持这个解决方案,它不是一个简单的循环。他可以在函数中添加一个timout,这样他就不会永远陷入循环中。不久或稍后,打开文件的应用程序将关闭文件,循环将能够删除文件。此外,关闭其他应用程序句柄也不是一个好主意。任何时候你建议进行投票,你都是在提供上下选票诱饵。I ag