【发布时间】:2008-11-19 06:37:01
【问题描述】:
如何删除运行时某个进程正在使用/打开的文件。 我在我的项目中使用 vb.net,图片显示在图片框中, 并且应该在不关闭该文件的情况下将其删除。
【问题讨论】:
如何删除运行时某个进程正在使用/打开的文件。 我在我的项目中使用 vb.net,图片显示在图片框中, 并且应该在不关闭该文件的情况下将其删除。
【问题讨论】:
如果文件是由另一个进程以独占模式打开的,你不能——Windows 不会让你这样做。在这种情况下,您可以做的最好的事情是等待其他进程关闭文件然后将其删除,或者在下次重新启动时使用带有标志MOVEFILE_DELAY_UNTIL_REBOOT 和目标位置的MoveFileEx() 将其删除NULL.
如果文件被另一个进程非独占打开,你可以正常调用DeleteFile()(假设你有权限这样做)。该文件将在其他进程打开时保留,但在其他进程关闭时将立即删除。
(是的,我意识到这些链接是针对 Win32 C API 的;在 VB .NET 下应该可以使用相同的功能)
【讨论】:
我认为这是不可能的。在 Windows 上,您不能删除具有打开句柄的文件。 http://support.microsoft.com/kb/320081
但是,根据您的描述,您不需要在应用程序中保持文件打开。打开文件,读取图像,然后关闭文件。然后可以删除文件,但应用程序仍然有图像数据。
【讨论】:
您可以关闭进程,然后将其删除,或在重新启动时删除。 使用上述建议获取有关在 Windows 中使用 MoveFileEx() 的信息。
要关闭进程,您可以执行以下操作:
For Each proc As Process In System.Diagnostics.Process.GetProcessesByName("process name here")
proc.Kill()
Next
【讨论】: