Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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
C# 是否允许用户删除我的应用程序正在使用的文件?_C#_Wpf_Windows_Filesystems - Fatal编程技术网

C# 是否允许用户删除我的应用程序正在使用的文件?

C# 是否允许用户删除我的应用程序正在使用的文件?,c#,wpf,windows,filesystems,C#,Wpf,Windows,Filesystems,我可以允许用户删除Windows下我的应用程序正在使用的文件吗 在我的场景中,我有一个由我的应用程序监视的“快速添加”目录。当它看到一个新的图像显示时,它会创建一个新的幻灯片以自动幻灯片显示。我还希望允许我的用户从我的“快速添加”目录中删除(和/或重命名)一个文件,并将其从幻灯片放映中删除 是否有一种方法可以标记该文件,通知Windows我可以在应用程序使用该文件时将其删除?如果在使用该文件的控件上调用Delete()或Rename()方法,则可以在删除或重命名该文件之前将其从PictureBo

我可以允许用户删除Windows下我的应用程序正在使用的文件吗

在我的场景中,我有一个由我的应用程序监视的“快速添加”目录。当它看到一个新的图像显示时,它会创建一个新的幻灯片以自动幻灯片显示。我还希望允许我的用户从我的“快速添加”目录中删除(和/或重命名)一个文件,并将其从幻灯片放映中删除

是否有一种方法可以标记该文件,通知Windows我可以在应用程序使用该文件时将其删除?

如果在使用该文件的控件上调用
Delete()
Rename()
方法,则可以在删除或重命名该文件之前将其从PictureBox中删除

做乘法应该没什么问题。通过控件上的复选框,您只需检查每个控件以查看该属性是否为true,然后调用适当的方法

是否有一种方法可以标记文件,通知Windows在我的应用程序使用该文件时可以删除该文件

对。在Win32中,这是传递给的
dwShareMode
。这是您希望允许另一个进程执行的操作的位字段。您要查找的位是
文件\u共享\u删除
,它允许在打开时进行删除或重命名。然而,为了达到最礼貌的行为,我建议包括所有3种,
FILE\u SHARE\u READ | FILE\u SHARE\u WRITE | FILE\u SHARE\u DELETE
[1]

由于您询问的是C#而不是Win32,因此在.NET世界中,这些都包含在打开文件时可以传递的枚举中,例如在中

请注意,这些标志不允许在按名称打开文件时重命名文件的父目录。由于内核的限制(技术上是在ntfs.sys IIRC中),无论共享如何,都会失败


脚注


1:编辑评论:令人遗憾的是,通过
0
(许多人不假思索地这么做)恰好是最不宽容的选择,或者更多在Windows上编写代码的人没有意识到此参数的作用,并且没有传递这三个标志。

您的用户是通过UI还是从文件夹中手动删除/重命名文件?他们可能是从文件夹中删除/重命名文件。例如,有人可以通过网络将一个新的图像放入目录,听起来很完美。我没有提到文件是通过
图像
对象的
属性打开的-我只是传递完整路径字符串。传递图像路径字符串时,是否有方法将此标志发送到
Image
标记?谢谢大家!@EvileClosetMonkey-我不知道,但这里有一个主意:调用
文件。打开
获取
,然后将
图像
图像源设置为使用此属性设置的内容:-确保在某个点关闭该文件。将尝试一下。非常感谢。