我可以允许用户在 Windows 下删除我的应用程序正在使用的文件吗?
在我的场景中,我有一个由我的应用程序监控的“快速添加”目录。当它看到新图像出现时,它会创建一张新幻灯片以在自动幻灯片放映中显示。我还想允许我的用户从我的“快速添加”目录中删除(和/或重命名)一个文件,并将其从幻灯片中删除。
有没有一种方法可以标记该文件,通知 Windows 我可以在我的应用程序使用它时删除该文件?
我可以允许用户在 Windows 下删除我的应用程序正在使用的文件吗?
在我的场景中,我有一个由我的应用程序监控的“快速添加”目录。当它看到新图像出现时,它会创建一张新幻灯片以在自动幻灯片放映中显示。我还想允许我的用户从我的“快速添加”目录中删除(和/或重命名)一个文件,并将其从幻灯片中删除。
有没有一种方法可以标记该文件,通知 Windows 我可以在我的应用程序使用它时删除该文件?
有没有一种方法可以标记该文件,通知 Windows 我可以在我的应用程序使用它时删除该文件?
是的。在 Win32 中,这被dwShareMode
传递给CreateFile()
. 这是您希望允许另一个进程执行的操作的位域。您正在寻找的是FILE_SHARE_DELETE
允许在打开时删除或重命名的位。但是,对于最礼貌的行为,我建议包括所有 3, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE
. [1]
由于您询问的是 C# 而不是 Win32,因此在 .NET 世界中,这些都包含在FileShare
您可以在打开文件时传递的枚举中,例如。在File.Open
.
请注意,这些标志不允许您在按名称打开文件时重命名文件的父目录。由于内核中的限制(技术上在 ntfs.sys IIRC 中),无论共享如何,这都会失败。
脚注
1:编辑评论:很遗憾,传递0
(许多人不假思索地做)恰好是最不被允许的选项,或者更多在 Windows 上编写代码的人没有意识到这个参数的作用并传递这三个标志。
如果在使用该文件的控件上调用Delete()
或Rename()
方法,则可以在 PictureBox 删除或重命名文件之前将其从 PictureBox 中删除。
做倍数应该没有太大问题。使用控件上的复选框,您只需检查每个控件以查看该属性是否为真,然后调用适当的方法。