在Win32 CreateFile()API中,我可以在打开文件时指定dwShareMode,以防止在打开文件时删除或更改该文件。
我在WinRT中寻找C#模拟。假设我打开一个文件:
StorageFile sf = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("x.txt");
IRandomAccessStreamWithContentType iras = await sf.OpenReadAsync();
然后从CMD.EXE的一个实例,我可以CD到... \ AppData \ Local \ Packages \ zzz \ LocalState目录并在WinRT应用程序打开它时删除该文件。
我的C#代码可以做什么导致删除失败?
答案 0 :(得分:1)
无法直接使用。这对于WinRT来说是典型的,它通过简单地不暴露功能来强制应用程序在api级别上玩得很好而不是占用资源。这也是一个相当严重的可用性问题,当用户切换它时,应用程序可能会被暂停很长时间。保持文件长时间锁定当然是非常有问题的,用户没有办法诊断问题。
当你使用LocalFolder时,无论如何都不是问题,没有其他人能够做到这一点。好吧,不计算有神帐号的人。
有一个后门可用,你可以调用CreateFile2()。允许Store应用程序使用的CreateFile()版本。它有一个dwShareMode参数。在C#程序中使用它并不是一件有趣的事情,你将获得商店验证拒绝的非零赔率。